简单工厂模式:定义一个工厂类,在工厂类中通过switch或if判断,决定应该创建哪个子类对象。创建子类对象是在这一个工厂类当中进行的。
其弊端在于每次新增都要去修改这个工厂类,违反了 开放-封闭原则。
工厂方法模式:定义多个工厂类,每一个Operation类都对应着一个工厂类。比如我们的计算器模型,加减乘除四种运算,对应着四个工厂类。
注意:这四个工厂类并不是继承自 Operation类,只是在工厂类的方法中return new Operation();创建一个Operation类的对象返回。
根据 理氏替换和依赖倒转原则——具体表现为面向接口编程,而不是面向实现编程。
针对多个工厂类,可以抽象出一个顶级工厂接口——OperationFactoryInterface ,所有的工厂类都实现该接口。
那么在新增操作的时候,只需要新增一个Operation类和一个对应的工厂类即可。对扩展开放,对修改关闭,没有违反开放-封闭原则。
在调用者发起调用的时候,使用顶级接口OperationFactoryInterface 接收结果,具体调用的工厂类交给调用者。
public static void main(String[] args) { OperationFactoryInterface oprFac = new AddFactory(); Operation opr = oprFac.createOperation(); opr.setNumberA(1); opr.setNumberB(2); double result = opr.getResult(); }