在设计模式中,用到最多的就是工厂模式了,工厂模式又分为:简单工厂模式、抽象工厂模式、工厂方法模式,而在工厂中,我用到最多就是简单工厂模式,简单工厂模式的优点在我看来就是:
扩展性比较好,因为各具体实现类都继承自父类,如果再增加一个类似操作方法类,那就让此类再次继承自父类,在工厂类中添加一个判断就行了,而不用修改原来的实现类。
其它的还未体会到,先贴一段具体代表性的代码吧,从《大话设计模式》中摘抄。
class Program
{
static void Main(string[] args)
{
Operation m_Operation = OperationFactory.createOperation("+");
m_Operation.NumberA = 10;
m_Operation.NumberB = 8;
Console.Write("结果是:{0}",m_Operation.GetResult().ToString());
Console.Read();
}
}
/// <summary>
/// 操作基类
/// </summary>
public class Operation
{
private double m_NumberA = 0;
public double NumberA
{
get { return m_NumberA; }
set { m_NumberA = value; }
}
private double m_NumberB = 0;
public double NumberB
{
get { return m_NumberB; }
set { m_NumberB = value; }
}
public virtual double GetResult()
{
double result = 0;
return result;
}
}
/// <summary>
/// 加法类
/// </summary>
class OperationAdd : Operation
{
public override double GetResult()
{
double result = 0;
result = this.NumberA + this.NumberB;
return result;
}
}
/// <summary>
/// 减法
/// </summary>
class OperationSub : Operation
{
public override double GetResult()
{
double result = 0;
result = this.NumberA - this.NumberB;
return result;
}
}
/// <summary>
/// 乘法
/// </summary>
class OperationMul : Operation
{
public override double GetResult()
{
double result = 0;
result = this.NumberA * this.NumberB;
return result;
}
}
/// <summary>
/// 除法
/// </summary>
class OperationDiv : Operation
{
public override double GetResult()
{
double result = 0;
if (NumberB == 0)
{
throw new Exception("除数不能为0!");
}
result = this.NumberA / this.NumberB;
return result;
}
}
public class OperationFactory
{
public static Operation createOperation(string p_Operation)
{
Operation m_Operation = null;
switch (p_Operation)
{
case "+":
m_Operation = new OperationAdd();
break;
case "-":
m_Operation = new OperationSub();
break;
case "*":
m_Operation = new OperationMul();
break;
case "/":
m_Operation = new OperationDiv();
break;
}
return m_Operation;
}
}