开放-封闭原则:
在设计模式中,对于不能修改,但可以扩展的思想也是一种重要的设计原则。比如国家对于香港的一国两制。大陆的社会主义是不可以更改的,但由于香港长期处于资本主义下,强制执行社会主义难免有些牵强,所以邓小平同志就用了开放-封闭原则,完美的解决了这一问题。在前期进行软件设计的时候,应该做好后期新增需求的准备。尽量做到新增需求时,不需要更改已有代码,而是新增代码,进行需求的扩展。
工厂方法模式:
问题抛出:在上一篇文章中,通过一个简单的两位数计算介绍了简单工厂模式。在这基础上,试想如果我们需要增加一种算法,输入两个数m、n,计算m的n次方。如果在简单工厂模式的基础上修改,那么有两步:
1> 新增算法实现类OperationFac.
2> 修改工厂类Factory,将阶乘判断逻辑添加上。
通过上面的步骤,实现了我们的需求。但是,如果细想,这违背了我们的开放-封闭原则,更改了Factory。
这里,就该工厂方法模式登场了。
工厂方法模式:定义一个用于创建对象的接口,让其子类决定实例化哪一类。工厂方法使一个类的实例化延迟到了其子类。
通过工厂模式实现上面需求:
1> 新增OperationFac运算类
package factorytest; /** * * @author 阿正 */ public class OperationFac extends Operation{ @Override public double getResult() { double result = 1; for(int i = 0;i < numberB;i++){ result *=numberA; } return result; } }
2> 定义创建对象工厂接口
package factorytest; /** * * @author 阿正 */ interface Factory { Operation getOperation(); }
3> 创建工厂子类,实现工厂接口
package factorytest; /** * * @author 阿正 */ public class FacFactory implements Factory{ @Override public Operation getOperation() { return new OperationFac(); } }
4> 修改客户端
package factorytest; /** * * @author 阿正 */ public class FactoryTest { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here Operation oper = new FacFactory().getOperation(); oper.numberA = 2; oper.numberB = 5; double result = oper.getResult(); System.out.println(result); } }
ok,搞定。
工厂方法克服了简单工厂违背开放-封闭原则的缺点,又保持了封装对象创建过程的优点。
时间: 2024-12-17 10:40:20