学无止境,精益求精
十年河东,十年河西,莫欺少年穷
学历代表你的过去,能力代表你的现在,学习代表你的将来
大话设计模式一书中第一个开讲的设计模式是简单工厂模式,关于简单工厂模式大家可参考鄙人的博客:代码无错就是优?简单工厂模式 C#
当然,本篇博客所讲的工厂模式和简单工厂模式还是非常类似的,因此,在进行工厂模式讲解之前,我们有必要重温下简单工厂模式
何为工厂模式?不论是简单工厂模式还是本篇的工厂模式,其工厂类主要负责生产对象,然后通过相应的对象调用相关的方法
在重温简单工厂模式之前,我们再次看下简单工厂模式的UML类图
针对上述的简单工厂模式UML类图,我们得到如下叙述:
1、简单工厂类是和运算类是有关联的(实线加箭头代表关联),简单工厂类的主要功能是生产运算对象
2、运算类用斜体表示,说明运算类为抽象类,运算类有两个属性及一个返回值为 double 的方法
3、加减乘除类继承运算类并实现GetResult()方法。
针对上述三点叙述,我们可用如下代码来实现(如果你还看不懂UML类图,可以参考鄙人博客:UML类图应该怎么看?)
public class 简单工厂类 { double NumberA, NumberB; public 简单工厂类() { } public 简单工厂类(double A, double B) { this.NumberA = A; this.NumberB = B; } double Oper = new double(); public double Operate(string 符号) { switch (符号) { case "+": Oper = new 加法类().GetResult(NumberA, NumberB); break; case "-": Oper = new 减法类().GetResult(NumberA, NumberB); break; case "*": Oper = new 乘法类().GetResult(NumberA, NumberB); break; case "/": Oper = new 除法类().GetResult(NumberA, NumberB); break; } return Oper; } } public abstract class 运算类 { public abstract double GetResult(double NumberA, double NumberB); } public class 加法类:运算类 { public override double GetResult(double NumberA, double NumberB) { return NumberA + NumberB; } } public class 减法类 : 运算类 { public override double GetResult(double NumberA, double NumberB) { return NumberA - NumberB; } } public class 乘法类 : 运算类 { public override double GetResult(double NumberA, double NumberB) { return NumberA * NumberB; } } public class 除法类 : 运算类 { public override double GetResult(double NumberA, double NumberB) { if (NumberB != 0) return NumberA / NumberB; else throw new Exception("被除数不能为零"); } }