为什么80%的码农都做不了架构师?>>>
这两天在看某本设计模式的书,看到了简单工厂模式。有些许疑惑,请大家围观并帮我答疑解惑。如果发现我的问题很白痴,求轻拍。
书上的简单工厂模式是这样的:
问题背景:实现一个简单的计算器,做加减乘除运算。可以使用简单工厂模式。下图是其UML图:
Operator是一个抽象类,有一个getResult方法用来计算左值和右值的结果,其实现在具体类中,AddOperator等。
OperatorFactory是一个工厂类,有一个createOperator方法,其内部实现大致如下:
1 public class OperatorFactory { 2 Operator op = null ; 3 public static Operator createOperator(String s){ 4 switch (s) { 5 case " + " : 6 op = new AddOperator(); 7 break ; 8 case " - " : 9 op = new SubstractOperator(); 10 break ; 11 case " * " : 12 op = new MultiplyOperator(); 13 break ; 14 case " / " : 15 op = new DivideOperator(); 16 break ; 17 } 18 return op; 19 } 20 }
如何调用这个计算器呢?
1 Operator op = OperatorFactory.createOperator( " + " ) 2 op.setLeftValue( 1 ); 3 op.setRightValue( 2 ); 4 double result = op.getResult();
到这里都没问题,我的问题出现在,需求的变化上。如果我们以后增加了一个取余的功能,那么我们需要做的是:
1. 新建一个ModOperator,继承自Operator抽象类,实现getResult方法;
2. 修改OperatorFactory类,在switch分支里面增加一个case,来处理取余的情况。
可是我想我们或许可以不要这个工厂类,我们在系统中直接删除工厂类,其他的保持不变。调用这个计算器的方式是:
1 Operator op = new AddOperator(); 2 op.setLeftValue( 1 ); 3 op.setRightValue( 2 ); 4 double result = op.getResult();
这样之后,如果需要添加一个新的取余方法,那么我们只要:
1. 新建一个ModOperator,继承自Operator抽象类,实现getResult方法;
即可。而不需要修改原来的工厂类(直接没用到这个工厂类)。只需要做一处修改即可。那么,这个工厂类的存在有何意义?
新加了一个工厂类,使得对于系统的变化,代码的更改反而增加了?
此处的封装到底有何意义?