简单工厂模式

来源:互联网 发布:淘宝号怎么更换身份证 编辑:程序博客网 时间:2024/06/05 06:26

        最近刚刚开始学习程杰老师的大话设计模式,首先是对面向对象基础知识的补习,例如类、封装、继承、多态、接口和事件等概念;其次就开始学习第一个设计模式--简单工厂模式了。

        开始学习,是由小菜面试受挫引出的,基本一整章都是在说代码的规范化,包括可维护、可复用、可扩展和灵活性等。比较纳闷,设计模式怎么在说这些呢?上网查了资料才得到解释:

        简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些。因为它至少不是Gof23种设计模式之一。但它在实际的编程中经常被用到,而且思想也非常简单,可以说是工厂方法模式的一个引导吧。

        那么究竟什么是简单工厂模式呢?

        我的理解是:用一个单独的工厂类来创建其他类的实例。

        简单工厂模式的主要组成由三种:

                1.工厂(Creator)角色(指概念中的工厂类)

                    简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。

               2.抽象产品(Product)角色(指概念中的其他类)

                    简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

               3.具体产品(Concrete Product)角色(指概念中的实例)

                    是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

         示例代码:

public class OperationFactory     //简单运算工厂类        {            public Operation CreateOperate(string operate)  //返回Operation类型的CreateOperate方法语句            {                Operation oper = null;                switch (operate)                {                    case "+":                        oper = new OperateAdd();                        break ;                    case "-":                        oper = new OperateSub();                        break;                    case "*":                        oper = new OperateMul();                        break;                    case "/":                        oper = new OperateDiv();                        break;                }                return oper;            }

 

             客户端的代码是:

Operation oper;oper = OperationFactory.CreateOperate("+");oper.NumberA=1;oper.NumberB=2;double result=oper.GetResult();

        至此,代码结束了。通过以上的代码,我们可以发现简单工厂模式其实也是有利也有弊的。

        利:

          1.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,明确了各自的职责和权利,有利于整个软件体系结构的优化;

             2.由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则;

             3.将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。

      弊:

             1.当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利。

        建议使用情况:

             1.工厂类负责创建的对象比较少;

             2.客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;

             3.由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。

        简单工厂模式虽不是23种设计模式中的一种,但是它对于编程人员的代码规范还是有一定启迪的。我们不能只满足于写完代码运行结果正确就完事,编程是一门技术,更是一门艺术,写出可维护、可复用、可扩展和灵活性好的代码,应是我们不断地追求。