题目:计算器
解析:工厂方法(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。
定义运算类:

1 class Operation 2 { 3 private double _numberA = 0; 4 private double _numberB = 0; 5 6 public double NumberA 7 { 8 get 9 { 10 return _numberA; 11 } 12 13 set 14 { 15 _numberA = value; 16 } 17 } 18 19 public double NumberB 20 { 21 get 22 { 23 return _numberB; 24 } 25 26 set 27 { 28 _numberB = value; 29 } 30 } 31 32 public virtual double GetResult() 33 { 34 double result = 0; 35 return result; 36 } 37 }
继承于运算类的具体运算的实现:

1 class OperationAdd : Operation 2 { 3 public override double GetResult() 4 { 5 double result = 0; 6 result = NumberA + NumberB; 7 return result; 8 } 9 } 10 11 class OperationSub : Operation 12 { 13 public override double GetResult() 14 { 15 double result = 0; 16 result = NumberA - NumberB; 17 return result; 18 } 19 } 20 21 class OperationMul : Operation 22 { 23 public override double GetResult() 24 { 25 double result = 0; 26 result = NumberA * NumberB; 27 return result; 28 } 29 } 30 31 class OperationDiv : Operation 32 { 33 public override double GetResult() 34 { 35 double result = 0; 36 if (NumberB == 0) 37 throw new Exception("除数不能为0"); 38 result = NumberA / NumberB; 39 return result; 40 } 41 }
工厂方法,接口:

1 interface IFactory 2 { 3 Operation CreateOperation(); 4 }
工厂方法,分别子类:

1 class AddOperation : IFactory 2 { 3 public Operation CreateOperation() 4 { 5 return new OperationAdd(); 6 } 7 } 8 9 class SubOperation : IFactory 10 { 11 public Operation CreateOperation() 12 { 13 return new OperationSub(); 14 } 15 } 16 17 class MulOperation : IFactory 18 { 19 public Operation CreateOperation() 20 { 21 return new OperationMul(); 22 } 23 } 24 25 class DivOperation:IFactory 26 { 27 public Operation CreateOperation() 28 { 29 return new OperationDiv(); 30 } 31 }
主函数:

1 static void Main(string[] args) 2 { 3 //工厂模式自己内部确定了改实例化哪个类,所以要发生变动,只需要在最外面这个地方变动即可 4 IFactory operFactory = new AddOperation(); 5 6 Operation oper = operFactory.CreateOperation(); 7 oper.NumberA = 9; 8 oper.NumberB = 5; 9 double result = oper.GetResult(); 10 11 Console.WriteLine(result); 12 13 Console.Read(); 14 }
注:文中所有代码及知识点均来自于《大话设计模式》,本人属于边学边看边敲代码边总结的阶段。