简单工厂模式与工厂方法模式的区别-(原)
先来看看类图
简单工厂模式:

工厂方法模式

下面是简单工厂模式的部分代码
public class OperationFactory
{
public static Operation createOperate(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;
}
case "sqr":
{
oper = new OperationSqr();
break;
}
case "sqrt":
{
oper = new OperationSqrt();
break;
}
case "+/-":
{
oper = new OperationReverse();
break;
}
}
return oper;
}
}
工厂方法模式其实就是把上面代码中switch语句的分支(根据不同条件创建不同的运算类)抽象出来,用多态去解决不同条件的问题,做法是先实现一个运算类的抽象类/接口,然后让运算类都去继承/实现 抽象类/接口,需要特定运算操作的时候只需要创建运算类对应的子类对象即可。这一改变,使得工厂方法更符合开闭(开放封闭)原则,因为虽然简单工厂模式和工厂方法模式对于变化是可扩展的,但是前者对于修改是非封闭的,后者确是封闭的。
工厂方法模式对简单工厂模式抽象后的部分代码如下:
/// <summary>
/// 工厂方法
/// </summary>
interface IFactory
{
Operation CreateOperation();
}
/// <summary>
/// 专门负责生产“+”的工厂
/// </summary>
class AddFactory : IFactory
{
public Operation CreateOperation()
{
return new OperationAdd();
}
}
/// <summary>
/// 专门负责生产“-”的工厂
/// </summary>
class SubFactory : IFactory
{
public Operation CreateOperation()
{
return new OperationSub();
}
}
/// <summary>
/// 专门负责生产“*”的工厂
/// </summary>
class MulFactory : IFactory
{
public Operation CreateOperation()
{
return new OperationMul();
}
}
/// <summary>
/// 专门负责生产“/”的工厂
/// </summary>
class DivFactory : IFactory
{
public Operation CreateOperation()
{
return new OperationDiv();
}
}
作者:http://www.cnblogs.com/langtianya
出处:http://www.cnblogs.com/langtianya
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

浙公网安备 33010602011771号