当前位置:编程学习 > C#/ASP.NET >>

简单设计模式

  最近刚刚开始学习程杰老师的大话设计模式,首先是对面向对象基础知识的补习,例如类、封装、继承、多态、接口和事件等概念;其次就开始学习第一个设计模式--简单工厂模式了。
 
        开始学习,是由小菜面试受挫引出的,基本一整章都是在说代码的规范化,包括可维护、可复用、可扩展和灵活性等。比较纳闷,设计模式怎么在说这些呢?上网查了资料才得到解释:
 
        简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些。因为它至少不是Gof23种设计模式之一。但它在实际的编程中经常被用到,而且思想也非常简单,可以说是工厂方法模式的一个引导吧。
 
        那么究竟什么是简单工厂模式呢?
 
        我的理解是:用一个单独的工厂类来创建其他类的实例。
 
        简单工厂模式的主要组成由三种:
 
                1.工厂(Creator)角色(指概念中的工厂类)
 
                    简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
 
               2.抽象产品(Product)角色(指概念中的其他类)
 
                    简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
 
               3.具体产品(Concrete Product)角色(指概念中的实例)
 
                    是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
 
         示例代码:
 
[csharp]  
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;  
  
            }  
 
 
             客户端的代码是:
 
[csharp]  
Operation oper;  
  
oper = OperationFactory.CreateOperate("+");  
  
oper.NumberA=1;  
  
oper.NumberB=2;  
  
double result=oper.GetResult();  
        至此,代码结束了。通过以上的代码,我们可以发现简单工厂模式其实也是有利也有弊的。
 
        利:
 
          1.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,明确了各自的职责和权利,有利于整个软件体系结构的优化;
 
             2.由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则;
 
             3.将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。
 
      弊:
 
             1.当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利。
 
        建议使用情况:
 
             1.工厂类负责创建的对象比较少;
 
             2.客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
 
             3.由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。
 
        简单工厂模式虽不是23种设计模式中的一种,但是它对于编程人员的代码规范还是有一定启迪的。我们不能只满足于写完代码运行结果正确就完事,编程是一门技术,更是一门艺术,写出可维护、可复用、可扩展和灵活性好的代码,应是我们不断地追求。
 
 
 
 
 
 
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,