您的位置:首页 > 其它

设计模式一——简单工厂模式

2015-07-29 21:07 357 查看


一、简单工厂(创建型模式)(不是GOF二十三种设计模式之一):由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(产品类继承于父类或者接口)的实例。

二、类图:



三、代码

class Operation
{
private double _numberA = 0;
private double _numberB = 0;
public double NumberA
{
get { return _numberA; }
set { _numberA = value; }
}
public double NumberB
{
get { return _numberB; }
set { _numberB = value; }
}
public virtual double GetResult()
{
double result = 0;
return result;
}
}
class OperationAdd : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA + NumberB;
return result;
}
}
class OperationSub : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA - NumberB;
return result;
}
}
class OperationMul : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA * NumberB;
return result;
}
}
class OperationDiv : Operation
{
public override double GetResult()
{
double result = 0;
if (NumberB == 0)
throw new Exception("0不能作为除数");
result = NumberA / NumberB;
return result;
}
}


//Operation Factory
public static Operation createOperate(string operate)
{
Operation operation = null;
switch (operate)
{
case "+":
operation = new OperationAdd();
break;
case "-":
operation = new OperationSub();
break;
case "*":
operation = new OperationMul();
break;
case "/":
operation = new OperationDiv();
break;
}
return operation;
}


//Main
/// <summary>
/// 计算器的代码,实现方法的封装,继承
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
Operation oper;
oper = OperationFactory.createOperate("+");
oper.NumberA = 10;
oper.NumberB = 5;
double result = oper.GetResult();
Console.WriteLine(result);
Console.ReadLine();
}

四、优缺点

优点:

不需要关心如何创建具体的产品,只需要提供产品的名称作为参数传给工厂,就可以实现想要的产品功能,构造容易,逻辑简单

缺点:

调用方法传递参数时,需要switch判断具体实现哪个方法

一个工厂类集合了所有类的实例创建逻辑,违反了高内聚的责任分配原则

引用:http://www.cnblogs.com/ytaozhao/p/3387540.html

<<大话设计模式>>(程杰)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息