您的位置:首页 > 其它

简单工厂模式

2017-09-18 16:19 232 查看
简单工厂模式 (Simple Factory) 又叫静态工厂方法(Static Factory Method)模式。
简单工厂模式通常是定义一个工厂类,这个类可以根据不同变量返回不同类的产品实例。

简单工厂模式是一种对象创建型模式 (可参考
设计模式 创建型模式
)。但是简单工厂模式不属于23种Gof设计模式之一。

说白了简单工厂就是创建一个单独类来创造实例的过程,这就是工厂;
已最常见的实现一个计算器为例子
code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20170918
{
public class Operation
{
protected double _numberA = 0;
protected 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;
return result = _numberA + _numberB;
}
}
class OperationSub : Operation
{
public override double GetResult()
{
double result;
return result = _numberA - _numberB;
}
}
class OperationMul :Operation
{
public override double GetResult()
{
double result;
return result = _numberA * _numberB;
}
}
class OperationDiv : Operation
{
public override double GetResult()
{
double result;
if (_numberB != 0)
return result = _numberA / _numberB;
else
throw new Exception("除数不能为0");
}
}
public class OperationFactory //核心类,通过这个类来创建实例
{
public static Operation createOperation(string operate)
{
Operation oper = null;
switch (operate)
{
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
}
return oper;
}
}
class Program
{
static void Main(string[] args)
{

Operation oper;
oper = OperationFactory.createOperation("+");
oper.NumberA = 1;
oper.NumberB = 2;
double result;
result = oper.GetResult();
Console.WriteLine(result);
Console.ReadKey();
}
}
}


优点:

简单工厂模式的工厂类是整个模式的关键。其中包含了必要的逻辑判断,根据外部信息,决定究竟应该创建哪个具体类的对象。

通过使用简单工厂模式,用户无需了解对象如何创建的,只要传入必要信息就可以了。实现了创建与调用的分离。降低了客户端的代码难度。

缺点:

如果增加和减少子类,需要修改工厂类,这违背了开闭原则

如果子类过多,会使得工厂类过于繁杂,这违背了高内聚原则,不利于后期的维护
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: