• 001 --- 第1章 简单工厂模式


    简述:

      简单工厂模式,如其名,简单,简单到明明是24种设计模式,却只归类为23种设计模式,把它排除了,但我还是写了出来。

      简单工厂模式包括:工厂类、抽象产品类、具体产品类。

        工厂类:制造产品,会有一个Create之类得函数,可以根据不同的标识符生产不同的具体产品,当然这些具体产品都继承自抽象产品。

        抽象产品类:具体产品类的基类。

        具体产品类:抽象产品类的派生类,当需要增加新的产品时,可以根据需要增加一个继承自抽象产品类的具体产品类,然后在工厂类中增加相应的处理分支即可。

      简单工厂模式实现了松耦合,当需要新增一种产品时,只需要做两点改动:

        增加一个继承自抽象类的具体产品类。

        在工厂类中增加响应的处理分支。

    例:加减乘除四则运算

    代码如下:

      1 #include <iostream>
      2 using namespace std;
      3 
      4 // 运算基类(抽象产品类)
      5 class COperation
      6 {
      7 private:
      8     double m_dA = 0;
      9     double m_dB = 0;
     10 public:
     11     void SetA(double dA)
     12     {
     13         m_dA = dA;
     14     }
     15     double GetA()
     16     {
     17         return m_dA;
     18     }
     19     void SetB(double dB)
     20     {
     21         m_dB = dB;
     22     }
     23     double GetB()
     24     {
     25         return m_dB;
     26     }
     27     virtual double GetResult()
     28     {
     29         double dResult = 0;
     30         return dResult;
     31     }
     32 };
     33 
     34 // 加法类(具体产品类)
     35 class COperationAdd : public COperation
     36 {
     37 public:
     38     virtual double GetResult()
     39     {
     40         double dResult = 0;
     41         dResult = GetA() + GetB();
     42         return dResult;
     43     }
     44 };
     45 
     46 // 减法类(具体产品类)
     47 class COperationSub : public COperation
     48 {
     49 public:
     50     virtual double GetResult()
     51     {
     52         double dResult = 0;
     53         dResult = GetA() - GetB();
     54         return dResult;
     55     }
     56 };
     57 
     58 // 乘法类(具体产品类)
     59 class COperationMul : public COperation
     60 {
     61 public:
     62     virtual double GetResult()
     63     {
     64         double dResult = 0;
     65         dResult = GetA() * GetB();
     66         return dResult;
     67     }
     68 };
     69 
     70 // 除法类(具体产品类)
     71 class COperationDiv : public COperation
     72 {
     73 public:
     74     virtual double GetResult()
     75     {
     76         double dResult = 0;
     77         if (0 == GetB())
     78             throw "除数不能为0!";
     79         dResult = GetA() / GetB();
     80         return dResult;
     81     }
     82 };
     83 
     84 // 简单工厂类
     85 class COperationFactory
     86 {
     87 public:
     88     static COperation* CreateOperate(char chOperate)
     89     {
     90         COperation* pOperation = NULL;
     91         switch (chOperate)
     92         {
     93         case '+':
     94             pOperation = new COperationAdd();
     95             break;
     96         case '-':
     97             pOperation = new COperationSub();
     98             break;
     99         case '*':
    100             pOperation = new COperationMul();
    101             break;
    102         case '/':
    103             pOperation = new COperationDiv();
    104             break;
    105         }
    106         return pOperation;
    107     }
    108 };
    109 
    110 int main()
    111 {
    112     COperation* pOperation;
    113     char chType = '/';
    114     pOperation = COperationFactory::CreateOperate(chType);
    115     pOperation->SetA(10);
    116     pOperation->SetB(2);
    117 
    118     double dResult = pOperation->GetResult();
    119     cout << dResult << endl;
    120 
    121     // C++堆区创建的对象需要手动释放资源
    122     if (pOperation)
    123         delete pOperation;
    124 
    125     system("pause");
    126     return 0;
    127 }

    输出结果:

  • 相关阅读:
    Android的webview的设置参数
    禁止RecycleView滑动
    Volley加载不出图片的问题
    LIstview滑动时不加载图片,停止时加载!
    【原创】设计模式开篇—面向对象的软件设计
    [原创]写给自己的总结—2014到2015
    【原创】开车分四个阶段的话,你属于哪个
    【原创】亲身经历的几次合同陷阱
    【转】程序员需谨记的8条团队开发原则
    【转】绩效考核的10大误区
  • 原文地址:https://www.cnblogs.com/SmallAndGreat/p/13468464.html
Copyright © 2020-2023  润新知