//工厂方法模式(创建型)
//与简单工厂模式的区别:
//简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化的类,对于客户端来说,
//去除了与具体产品的依赖。但是问题也在这里,就像为如果为简单工厂模式下的二元四则运算添加一个新的功能,如计算
// ”M的N次方“,这时候我们就需要在工厂类中增加一个case分支,这就违背了开闭原则。而工厂方法模式想要增加这个功能
//时,类都是在增加,没有修改,但客户端需要进行相应的修改。
//1、工厂方法模式下的二元四则运算
// 二元运算的基类public class Operation{//私有成员private double _numberA = 0;private double _numberB = 0;//公共属性public double NumberA{get { return _numberA;}set { _numberA = value;}}public double NumberB{get { return _numberB; }set { _numberB = value; }}//虚函数public virtual double GetResult(){double result = 0;return result;}}// 四则运算类class OperationAdd : Operation{//重写基类的虚函数public override double GetResult(){double result = 0;result = NumberA + NumberB;return result;}}class OperationSub : Operation{public override double GetResult(){double result = 0;result = NumberA - NumberB;return result;}}class OperationMul : Operation{public override double GetResult(){double result = 0;result = NumberA * NumberB;return result;}}class OperationDiv : Operation{public override double GetResult(){double result = 0;if(NumberB != 0){result = NumberA / NumberB;}else{throw new Exception("can't divided by 0");}return result;}}//工厂接口interface IFactory{Operation CreateOperation();}//加减乘除各创建一个具体工厂实现接口class AddFactory : IFactory{public Operation CreateOperation(){return new OperationAdd();}}class SubFactory : IFactory{public Operation CreateOperation(){return new OperationSub();}}class MulFactory : IFactory{public Operation CreateOperation(){return new OperationMul();}}class DivFactory : IFactory{public Operation CreateOperation(){return new OperationDiv();}}public class test{public static void Main(){IFactory operFactory = new AddFactory(); // 这个位置可更改Operation oper = operFactory.CreateOperation();oper.NumberA = 1;oper.NumberB = 2;double result = oper.GetResult();Console.WriteLine(result);Console.ReadLine();}}
9553

被折叠的 条评论
为什么被折叠?



