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

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

这是第几次去回头再学习工厂方法了?应该是第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;
    }
}


/

相关文章
|
18天前
|
设计模式 Java
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
|
19天前
|
设计模式 存储 算法
设计模式学习心得之五种创建者模式(2)
设计模式学习心得之五种创建者模式(2)
15 2
|
19天前
|
设计模式 uml
设计模式学习心得之前置知识 UML图看法与六大原则(下)
设计模式学习心得之前置知识 UML图看法与六大原则(下)
12 2
|
19天前
|
设计模式 搜索推荐
工厂方法模式-大话设计模式
工厂方法模式-大话设计模式
10 1
|
1月前
|
设计模式 新零售 Java
设计模式最佳套路5 —— 愉快地使用工厂方法模式
工厂模式一般配合策略模式一起使用,当系统中有多种产品(策略),且每种产品有多个实例时,此时适合使用工厂模式:每种产品对应的工厂提供该产品不同实例的创建功能,从而避免调用方和产品创建逻辑的耦合,完美符合迪米特法则(最少知道原则)。
42 6
|
1月前
|
设计模式 XML Java
【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】
三 结尾 如果文章中有什么不足,欢迎大家留言交流,感谢朋友们的支持! 如果能帮到你的话,那就来关注我吧!如果您更喜欢微信文章的阅读方式,可以关注我的公众号
25 5
|
1月前
|
设计模式 Java 关系型数据库
设计模式第2弹:工厂方法模式
type ComputerProduct struct{} // 实现工厂方法 func (computer ComputerProduct) GetInformation() string { return "电脑,官方称呼计算机,主要用于进行数据运算的一台机器。" }
30 4
|
19天前
|
设计模式 安全 Java
设计模式学习心得之五种创建者模式(1)
设计模式学习心得之五种创建者模式(1)
9 0
|
19天前
|
设计模式 数据可视化 程序员
设计模式学习心得之前置知识 UML图看法与六大原则(上)
设计模式学习心得之前置知识 UML图看法与六大原则(上)
10 0
|
2月前
|
设计模式 安全 Java
【JAVA学习之路 | 基础篇】单例设计模式
【JAVA学习之路 | 基础篇】单例设计模式