c#设计模式之简单工厂
1.面向对象的3大属性,封装、继承、多态,以一个加单的计算机为例:
创建一个父类Operation 有两个属性 和一个计算方法(虚方法),便于子类重写:
1 public class Operation 2 { 3 private double _numberA = 0; 4 private double _numberB = 0; 5 6 public double NumberA 7 { 8 get { return _numberA; } 9 set { _numberA = value; } 10 } 11 12 public double NumberB 13 { 14 get { return _numberB; } 15 set { _numberB = value; } 16 } 17 18 /// <summary>虚方法 19 /// 20 /// </summary> 21 /// <returns></returns> 22 public virtual double GetResult() 23 { 24 double result = 0; 25 return result; 26 } 27 }
接下来创建计算类,加减乘除类来集成操作类
加类
1 public class OperationAdd:Operation 2 { 3 public override double GetResult() 4 { 5 double result = 0; 6 result = NumberA + NumberB; 7 return result; 8 } 9 }
减类
1 public class OperationSub:Operation 2 { 3 public override double GetResult() 4 { 5 double result = 0; 6 result = NumberA - NumberB; 7 return result; 8 } 9 }
乘类
1 public class OperationMul:Operation 2 { 3 public override double GetResult() 4 { 5 double result = 0; 6 result = NumberA * NumberB; 7 return result; 8 } 9 }
除类
1 public class OperationDiv:Operation 2 { 3 public override double GetResult() 4 { 5 double result = 0; 6 if (NumberB == 0) 7 throw new Exception("除数不能为0"); 8 result = NumberA / NumberB; 9 return result; 10 } 11 }
然后通过简单工厂类来创建计算的实例
1 public class OperationFactory 2 { 3 public static Operation createOperate(string operate) 4 { 5 Operation oper = null; 6 switch (operate) 7 { 8 case "+": 9 oper = new OperationAdd(); 10 break; 11 case "-": 12 oper = new OperationSub(); 13 break; 14 case "*": 15 oper = new OperationMul(); 16 break; 17 case "/": 18 oper = new OperationDiv(); 19 break; 20 } 21 return oper; 22 } 23 }
最后通过界面去调用:
1 static void Main(string[] args) 2 { 3 Operation oper; 4 oper = OperationFactory.createOperate("+"); 5 oper.NumberA = 1; 6 oper.NumberB = 2; 7 double result = oper.GetResult(); 8 Console.WriteLine(result); 9 Console.ReadKey(); 10 }
这里把计算过程都封装成一个方法,每个计算类又集成了操作类,这样由于每个方法都重写了计算方法,这里表现出一个方法的不同表现形态,如果以后要增加其他的方法,只需要继承操作类 重写计算方法即可,这样也不会对原有的程序进行修改,实现了解耦,面向对象语言的优点在于可维护性,可复用,可扩展、灵活性。
以上为自学的一点总结,希望有不对的地方,请大家指点,谢谢