zoukankan      html  css  js  c++  java
  • 简单工厂模式与工厂方法模式的区别(原)

    先来看看类图

    简单工厂模式:

    工厂方法模式

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

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

  • 相关阅读:
    面试题19:包含min函数的栈
    编程之美 计算字符串的相似度
    android 数据持久化——I/O操作
    SSD磁盘,CPU居高不下,高并发的情况下,是不是mysql解析器耗费的cpu资源高?
    Eclipse、MyEclipse优化,提高运行速度
    Sonar入门学习
    Oracle 生成指定范围内随机日期
    ios中的GCD
    如何使用Win8系统自带杀毒软件
    安装Ubuntu版本linux过程中没有提示设置root用户密码问题的解决办法
  • 原文地址:https://www.cnblogs.com/langtianya/p/2951200.html
Copyright © 2011-2022 走看看