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


    先来看看类图

    简单工厂模式:

    工厂方法模式

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

    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设计模式之抽象工厂模式

  • 相关阅读:
    Oracle statspack 安装及使用
    MyEclipse 快捷键
    ORACLE EXP/IMP的使用详解
    PyCharm如何配置断点调试功能
    ftl-server静态资源服务器
    JS计算两个日期时间差,天 小时 分 秒格式
    readystatechange
    js实现input中输入数字,控制每四位加一个空格(银行卡号格式)
    javascript“类”与继承总结和回顾
    Javascript根据指定下标或对象删除数组元素
  • 原文地址:https://www.cnblogs.com/langtianya/p/2951200.html
Copyright © 2020-2023  润新知