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

    【1】什么是简单工厂模式?

    核心思想:创建一个具体工厂角色,根据客户端输入的条件产生相应的实体对象,然后由不同实体对象对virtual操作方法的调用得到不同的结果。

    理解:根据条件生成不同的实例。利用多态的特性,调用同名方法,不同的实例将得到不同的结果。

    【2】代码示例如下:

    代码如下:

      1 #include <iostream>
      2 #include <string>
      3 using namespace std;
      4 
      5 /*
      6 * 运算基类
      7 */
      8 class Operation
      9 {
     10 protected:
     11     double m_numberA;
     12     double m_numberB;
     13 
     14 public:
     15     double getNumberA()
     16     {
     17         return m_numberA;
     18     }
     19 
     20     void setNumberA(double dValue)
     21     {
     22         m_numberA = dValue;
     23     }
     24 
     25     double getNumberB()
     26     {
     27         return m_numberB;
     28     }
     29 
     30     void setNumberB(double dValue)
     31     {
     32         m_numberB = dValue;
     33     }
     34 
     35     virtual double getResult()
     36     {
     37         return 0;
     38     }
     39 };
     40 
     41 /*
     42 * 加法运算子类
     43 */
     44 class addOperation : public Operation
     45 {
     46 public:
     47     double getResult()
     48     {
     49         return m_numberA + m_numberB;
     50     }
     51 };
     52 
     53 /*
     54 * 减法运算子类
     55 */
     56 class subOperation : public Operation
     57 {
     58 public:
     59     double getResult()
     60     {
     61         return m_numberA - m_numberB;
     62     }
     63 };
     64 
     65 /*
     66 * 乘法运算子类
     67 */
     68 class mulOperation : public Operation
     69 {
     70 public:
     71     double getResult()
     72     {
     73         return m_numberA * m_numberB;
     74     }
     75 };
     76 
     77 /*
     78 * 除法运算子类
     79 */
     80 class divOperation : public Operation
     81 {
     82 public:
     83     double getResult()
     84     {
     85         if (0 == m_numberB)
     86         {
     87             return 0; // 无意义
     88         }
     89 
     90         return m_numberA / m_numberB;
     91     }
     92 };
     93 
     94 /*
     95 * 构建简单工厂
     96 */
     97 class operFactory
     98 {
     99 public:
    100     static Operation *createOperation(char c)
    101     {
    102         switch (c)
    103         {
    104         case '+':
    105             return (new addOperation);
    106         case '-':
    107             return (new subOperation);
    108         case '*':
    109             return (new mulOperation);
    110         case '/':
    111             return (new divOperation);
    112         default:
    113             return (new addOperation);
    114         }
    115     }
    116 };
    117 
    118 /*
    119 * 客户端应用示例
    120 */
    121 void main()
    122 {
    123     Operation* pOper = operFactory::createOperation('+');
    124     pOper->setNumberA(9);
    125     pOper->setNumberB(99);
    126     cout << pOper->getResult() << endl;
    127 
    128     delete pOper;
    129     pOper = NULL;
    130 
    131     system("pause");
    132 }
    133 
    134 // run result:
    135 /*
    136 108
    137 请按任意键继续. . .
    138 */

    Good Good Study, Day Day Up.

    顺序 选择 循环 总结

  • 相关阅读:
    ios中的几种多线程实现
    在mac下使用终端管理svn
    关于UIScrollViewDelegate协议中每个回调函数的意义及执行顺序的理解
    UIView 及其子类对象 抖动效果的实现
    ios、andriod、cocos2d 视图层次理解
    委托  通知中心   监听/观察
    iphone 中使用苹果禁用的私有Framework
    关于苹果官方网站Reachability检测网络的总结
    iOS设备的分辨率
    ios开发多线程、网络请求的理解 错误码的理解
  • 原文地址:https://www.cnblogs.com/Braveliu/p/3938295.html
Copyright © 2011-2022 走看看