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

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

但是为什么符合呢?

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

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

public interface IFactory {
    Operation createOperation();
}

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

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;
    }
}

你可能感兴趣的:(设计模式,学习)