博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单工厂模式与工厂方法模式的区别-(原)
阅读量:5089 次
发布时间:2019-06-13

本文共 2293 字,大约阅读时间需要 7 分钟。

先来看看类图

简单工厂模式:

工厂方法模式

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

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语句的分支(根据不同条件创建不同的运算类)抽象出来,用多态去解决不同条件的问题,做法是先实现一个运算类的抽象类/接口,然后让运算类都去继承/实现 抽象类/接口,需要特定运算操作的时候只需要创建运算类对应的子类对象即可。这一改变,使得工厂方法更符合开闭(开放封闭)原则,因为虽然简单工厂模式和工厂方法模式对于变化是可扩展的,但是前者对于修改是非封闭的,后者确是封闭的。

工厂方法模式对简单工厂模式抽象后的部分代码如下:

///     /// 工厂方法    ///     interface IFactory    {        Operation CreateOperation();    }    ///     /// 专门负责生产“+”的工厂    ///     class AddFactory : IFactory    {        public Operation CreateOperation()        {            return new OperationAdd();        }    }    ///     /// 专门负责生产“-”的工厂    ///     class SubFactory : IFactory    {        public Operation CreateOperation()        {            return new OperationSub();        }    }    ///     /// 专门负责生产“*”的工厂    ///     class MulFactory : IFactory    {        public Operation CreateOperation()        {            return new OperationMul();        }    }    ///     /// 专门负责生产“/”的工厂    ///     class DivFactory : IFactory    {        public Operation CreateOperation()        {            return new OperationDiv();        }    }

  

作者:

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

 相关:

转载于:https://www.cnblogs.com/langtianya/archive/2013/03/09/2951200.html

你可能感兴趣的文章