简单工厂模式 -- 大话设计模式
在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……
简单工厂的作用是实例化对象,不需要客户了解这个对象属于哪个具体子类。简单工厂实例化的类具有相同的接口或者基类,在子类相对固定或者不需要扩展的时候,可以使用简单工厂。如数据库生产工厂就可以使用简单工厂来实现。
1.简单的计算器实现
输入两个数和运算符,实现两数相加或者两数相减。
首先我们定义一个运算类,包含两个属性:数字A和数字B,还有一个获取结果的虚方法GetResult方便获取运算结果
/// <summary> /// 运算类 /// </summary> public class Operation { public double NumberA { get; set; } public double NumberB { get; set; } public virtual double GetResult() { var result = 0; return result; } }
然后我们编写加法运算和减法运算类,让其集成运算类,重写GetResult类实现不同的运算结果(如果我们以后要增加其他运算方法,只需要新增一个继承Operation的运算类,而无需变动已经写好的加法和减法运算类)
/// <summary> /// 加法运算 /// </summary> public class OperationAdd : Operation { public override double GetResult() { return this.NumberA + this.NumberB; } } /// <summary> /// 减法运算 /// </summary> public class OperationSub : Operation { public override double GetResult() { return this.NumberA - this.NumberB; } }
定义一个简单运算工厂,到底要实例化谁,将来是否要新增实例化对象,比如除法、乘法等。这些都交给简单运算工厂来实现,以后若有变化要动也只需要改动工厂这块就好了,而不是整个项目去搜索一遍实例化运算类的代码
/// <summary> /// 简单运算工厂 /// </summary> public class OperationFactory { public static Operation CreateOperation(string operate) { Operation oper = null; switch (operate) { case "+": oper = new OperationAdd(); break; case "-": oper = new OperationSub(); break; } return oper; } }