zoukankan      html  css  js  c++  java
  • 设计模式 -- 简单工厂模式

    设计模式之简单工厂模式

    转载请注明出处,谢谢

    参考资料: 

    做一只靠得住的猪 

    左潇龙  

    3 大话设计模式

    51CTO--思考简单工厂

    概念

    简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,但其不属于23种GOF设计模式之一,通常它根据自变量的不同返回不同的类的实例。


    特点

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

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

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

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


    具体实例

    该实例出自大话设计模式,说的是要设计一个计算器,其中该计算器包括了+、 - 、 * 、 / 等运算,该计算器采用简单工厂设计模式来进行设计编码。于是根据以上的介绍,简单工厂设计模式需要有一个工厂角色、抽象产品角色、具体产品角色这三大角色。我们可假设运算定位为抽象产品角色或者父类,具体的运算如+ 、- 、* 、 / 等作为具体产品角色,工厂角色根据具体的运算符类别产生相应的运算实例。
    class Operation         //抽象产品角色
    {
          public:
          Operation(double,double);
          double getNumberA(){ return a; }
          double getNumberB(){ return b; }
        private:
           double a,b;
    };
    

    class OperationAdd:public Operation    //具体角色产品 +运算
    {  .........
         public:
         double Add(double,double);
          ........
    };
    class OperationMinus:public Operation   //具体角色产品  -运算
    {      .........
             public:
             double Minus(double,double);
             ........
    };
    class OperationMultiply:public Operation    //具体角色产品  *运算
    {     .......
           public:
           double Multiply(double,double);
           .......
    };
    class Factory   //工厂角色
    {
          ..........
          Operation CreateFactory(char type)
         {
             switch(type)             //通过条件判断产生什么类型的具体角色产品
             {
                    case '+': return OperationAdd();
                     case '-':return OperationMinus();
                      ...........
              }
         }
          ..........
    };

    缺点

     
    1 在工厂角色中,将多个逻辑集中放在一个类里面有其自身的缺点。当产品类有不同的接口种类时,工厂类需要判断在什么时候创建某种产品。这种对时机的判断和对哪一种具体产品的判断逻辑混合在一起,使得系统在将来进行功能扩展时较为困难。
    2 私有化简单工厂的构造方法,使用静态方法来创建接口,也就不能通过写简单工厂类的子类来改变创建接口的方法的行为了。不过,通常情况下是不需要为简单工厂创建子类的。

    何时使用简单工厂模式

    1 如果想要完全封装隔离具体实现,让外部只能通过接口来操作封装体,那么可以选用简单工厂,让客户端通过工厂来获取相应的接口,而无须关心具体的实现。

    2 如果想要把对外创建对象的职责集中管理和控制,可以选用简单工厂,一个简单工厂可以创建很多的、不相关的对象,可以把对外创建对象的职责集中到一个简单工厂来,从而实现集中管理和控制。



  • 相关阅读:
    2021.1.28 个人rating赛补题报告
    2021.1.23 个人rating赛补题报告
    2021.1.23 个人rating赛补题报告
    2020.12.14 个人训练赛补题报告
    2020.11.28 2020团体程序设计天梯赛补题报告
    2020.12.3 Codeforces Beta Round #73(Div2)补题报告
    Xhorse VVDI Prog V5.0.6 is Ready for BCM2 Adapter
    Program 2021 Ford Bronco All Keys Lost using VVDI Key Tool Plus
    Xhorse VVDI Prog V5.0.4 Software Update in July 2021
    How to use Xhorse VVDI2 to Exchange BMW FEM/BDC Module?
  • 原文地址:https://www.cnblogs.com/aukle/p/3214892.html
Copyright © 2011-2022 走看看