设计模式关于工厂方法学习总结

简介: 设计模式关于工厂方法学习总结

这是第几次去回头再学习工厂方法了?应该是第4次了,关于之前学习工厂方法都是知道它解决了我们创建管理对象的问题,并且使用了这个工厂以后还能够支持扩充,符合了面向对象的思想。

但是为什么符合呢?

是因为配合着反射动态的添加class类就能够动态的创建对象。


这个是工厂方法中的工厂接口,

1. public interface IFactory {
2.     Operation createOperation();
3. }

这个是实现工厂接口的实现类


public class DivFactory implements IFactory{
    @Override
    public Operation createOperation() {
        return new OperationDiv();
    }
}

这个是被工厂创建的类型的父类


public abstract class Operation {
    private double numberA = 0;
    private double numberB = 0;
    public abstract double GetResult() ;
    public double getNumberA() {
        return numberA;
    }
    public void setNumberA(double numberA) {
        this.numberA = numberA;
    }
    public double getNumberB() {
        return numberB;
    }
    public void setNumberB(double numberB) {
        this.numberB = numberB;
    }
}

如果我们有其他的Operation的子类需要被加载到程序中那我们就需要创建对应的工厂子类,而添加的这个操作是符合开闭原则的。但是这几个操作都是有一定共性的添加类、编译类、加载到程序中,那么这些有共性的东西有规律的我们就可以交给机器去做。所以这次在工厂方法中的应用,我们只需要有对应的工厂接口即可,如果需要不同的类的对象,那么创建不同类型的工厂实现类即可,这里知道要去如何自动化?以及自动化帮助我们解决了哪些问题。


这是创建类的模板类,通过这个类去动态的创建相应的类,这里通过字符串拼接的形式进行拼接,后期可以更换为一个模板文件进行读取然后操作。

public class ClientTemplate {
    public String createClient(String ClientName) throws IOException {
        String srcFactoryCode = "package saomiao.client;\n" +
                "\n"+
                "import saomiao.operation."+ClientName+";\n" +
                "import saomiao.Operation;\n" +
                "import saomiao.OperationFactory;\n" +
                "import saomiao.operationFactory."+ClientName+"Factory"+";\n" +
                "public class "+ClientName+"Client{"+"\n"+
                "   "+"public static void main (String[] args) throws Exception{ "+"\n" +
                "   "+"OperationFactory operationFactory = new " +ClientName+"Factory();"+ "\n"+
                "   "+"Operation operate = operationFactory.createOperate();" +"\n"+
                "   "+"operate.setNumberA(11);"+"\n"+
                "   "+"operate.setNumberB(22);"+"\n"+
                "   "+"double result = operate.GetResult();"+"\n"+
                "   "+"System.out.println(result);"+"\n"+
                "   "+"}"+"\n"+
                "}";
        String srcFilePath = "D:\\only-java\\springbootDemo\\springDemo\\src\\main\\java\\saomiao\\client\\" + ClientName+"Client" + ".java";
        FileWriter fileWriter = null;
        File file = new File(srcFilePath);
        if (!file.exists()) {
            file.createNewFile();
        }
        fileWriter = new FileWriter(srcFilePath);
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
        bufferedWriter.write(srcFactoryCode);
        bufferedWriter.close();
        return srcFilePath;
    }
}


/

相关文章
|
2月前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
4月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
4月前
|
设计模式 Java
Java设计模式-工厂方法模式(4)
Java设计模式-工厂方法模式(4)
|
5月前
|
设计模式 XML 存储
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
文章详细介绍了工厂方法模式(Factory Method Pattern),这是一种创建型设计模式,用于将对象的创建过程委托给多个工厂子类中的某一个,以实现对象创建的封装和扩展性。文章通过日志记录器的实例,展示了工厂方法模式的结构、角色、时序图、代码实现、优点、缺点以及适用环境,并探讨了如何通过配置文件和Java反射机制实现工厂的动态创建。
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
|
5月前
|
设计模式 uml
设计模式-------------工厂模式之工厂方法模式(创建型)
工厂方法模式是一种创建型设计模式,它通过定义一个用于创建对象的接口,让子类决定实例化哪一个类,从而实现类的实例化推迟到子类中进行,提高了系统的灵活性和可扩展性。
|
7月前
|
设计模式 Java
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
|
7月前
|
设计模式 存储 算法
设计模式学习心得之五种创建者模式(2)
设计模式学习心得之五种创建者模式(2)
55 2
|
7月前
|
设计模式 uml
设计模式学习心得之前置知识 UML图看法与六大原则(下)
设计模式学习心得之前置知识 UML图看法与六大原则(下)
50 2
|
7月前
|
设计模式 搜索推荐
工厂方法模式-大话设计模式
工厂方法模式-大话设计模式
|
7月前
|
设计模式 新零售 Java
设计模式最佳套路5 —— 愉快地使用工厂方法模式
工厂模式一般配合策略模式一起使用,当系统中有多种产品(策略),且每种产品有多个实例时,此时适合使用工厂模式:每种产品对应的工厂提供该产品不同实例的创建功能,从而避免调用方和产品创建逻辑的耦合,完美符合迪米特法则(最少知道原则)。
95 6