设计模式学习-简单工厂模式

模式概述:

专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,但其不属于23种GOF设计模式之一,通常它根据自变量的不同返回不同的类的实例。


UML类图:

设计模式学习-简单工厂模式

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建出哪一个产品类的实例。由上图可以看出,简单工厂模式有工厂、抽象产品、具体产品三个角色。

  • 工厂角色(Factory) 
    是简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。可被外界直接调用来创建产品对象

  • 抽象产品角色(Product)
    是简单工厂模式所创建的所有产品对象的父类,它负责描述所有实例所共有的公共接口

  • 具体产品角色(ConcreteProductA及ConcreteProductB)
    是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例

应用场景: 

光说不练假把式,下面试着用简单工厂模式代码实现一个模拟场景

现实生活中大家都习惯刷卡买单,卡的种类很多,VISA、MASTERCARD等等...下面我们写代码模拟刷卡处理


首先,我们先将各种各样的银行卡抽象出来,实现一个BankCardHandle抽象类,然后每种卡处理实现一个类,并继承BankCardHandle

View Code 
     abstract  class BankCardHandle 
    {
         public  abstract  void HandleProcess();
    }

     class VisaHandle : BankCardHandle 
    {
         public  override  void HandleProcess()
        {
            Console.WriteLine( " VISA卡处理中 ");
        }
    }

     class MasterCardHandle : BankCardHandle 
    {
         public  override  void HandleProcess()
        {
            Console.WriteLine( " MASTERCARD卡处理中 ");
        }


然后,我们实现工厂角色HandleFactory,定义一个静态方法生成BankCardHandle的实例

View Code 
     class HandleFactory 
    {
         public  static BankCardHandle CreateBankCardHandle( string type) 
        {
             switch (type.ToUpper())
            {
                 case  " VISA ":
                     return  new VisaHandle();
                 case  " MASTERCARD ":
                     return  new MasterCardHandle();
                 default:
                     return  null;
            }
        }


到这里,三个角色全部定义完成,下面看看客户端调用的代码实现

View Code 
        BankCardHandle hd;
        hd = HandleFactory.CreateBankCardHandle( " VISA ");
        hd.HandleProcess();
        hd = HandleFactory.CreateBankCardHandle( " MASTERCARD ");
        hd.HandleProcess();

到此我们模拟的刷卡实现就完成了。


优势劣势:

  在简单工厂模式中,工厂类是整个模式的关键,其包含必要的判断逻辑,能够根据外界给定的信息,决定究竟创建哪个类的实例,外界可以不用去关注对象的创建,仅需要负责“消费”对象就可以了,明确区分了责任,有利于结构的优化。

  不过,简单工厂模式的缺点也提现在其工厂类上,该类集中了所有实例的创建逻辑,违反了高内聚的责任分配原则,当系统的具体产品类不断增多时,工厂类中条件判断过多,不利于扩展及维护,简单工厂模式的这些缺点,利用工厂方法模式可以得到一定的克服。

  未完待续.... 

你可能感兴趣的:(简单工厂模式)