简单工厂模式 -- 大话设计模式
在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……
简单工厂的作用是实例化对象,不需要客户了解这个对象属于哪个具体子类。简单工厂实例化的类具有相同的接口或者基类,在子类相对固定或者不需要扩展的时候,可以使用简单工厂。如数据库生产工厂就可以使用简单工厂来实现。
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;
}
}

浙公网安备 33010602011771号