设计模式一——简单工厂模式
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
<<大话设计模式>>(程杰)
一、简单工厂(创建型模式)(不是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
<<大话设计模式>>(程杰)
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 设计模式之创建型模式
- 浅谈设计模式的学习
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 浅谈c#设计模式之单一原则
- C#设计模式之观察者模式实例讲解
- C#设计模式之单例模式实例讲解
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- 面向对象设计模式的核心法则
- JavaScript设计模式之单件模式介绍
- 深入理解JavaScript系列(25):设计模式之单例模式详解
- JavaScript设计模式之外观模式实例
- 常见的PHP五种设计模式小结
- 小议javascript 设计模式 推荐
- javascript 设计模式之单体模式 面向对象学习基础