针对简单工厂模式违背了“开放封闭原则”,不但对扩展开发,也对修改开放的缺点。因此工厂方法很好的解决了这个问题。
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
结构图:
针对简单工厂模式的“计数器”例子,换成工厂方法后的结构图如下:
工厂方法模式实现时,客户端需要决定实例化哪一个工厂类来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是改工厂类,而现在是修改客户端。
结构图:
代码如下:
1 工厂接口: 2 3 interface IFactory 4 { 5 Operation CreateOperation(); 6 }
加减乘除各建一个工厂去实现这个接口
1 //加法工厂 2 class AddFactory:IFactory 3 { 4 public Operation CreateOperation() 5 { 6 return new OperationAdd(); 7 } 8 }
1 //减法工厂 2 class SubFactory:IFactory 3 { 4 public Operation CreateOperation() 5 { 6 return new OperationSub(); 7 } 8 }
其他略。
1 客户端代码: 2 IFactory operFactory=new AddFactory(); 3 Operation oper=operFactory.CreateOperation(); 4 oper.NumberA=1; 5 oper.NumberB=2; 6 double result=oper.GetResult();
浙公网安备 33010602011771号