简单工厂模式与工厂方法模式的区别-(原)

先来看看类图

简单工厂模式:

工厂方法模式

下面是简单工厂模式的部分代码

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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

 相关:JAVA设计模式之抽象工厂模式

posted @ 2013-03-09 10:33  jack_ou  阅读(1259)  评论(0编辑  收藏  举报