• (创建型模式)Factory——简单工厂模式


    一、意图

         定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory使一个类的实例化延迟到其子类。(四人团)

        实际上: 工厂模式主要就是用于创建对象。新添加类时,不会影响以前的系统代码。

    二、基本思想

       核心思想:是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。

         客户类和工厂类分开,消费者任何时候需要某种产品类对象,只需要向工厂类(有静态成员函数接收)提交参数和请求即可。消费者无需修改(直接用所有产品共同的父类指针指向)就可以接纳和使用新产品类的对象。

    三、优缺点分析

    GOOD: 适用于不同情况创建不同的类时

    BAD:  客户端必须要知道基类和工厂类,耦合性差,而且当产品修改时,工厂类也要做相应修改(如:如何创建及如何向客户端提供)

    四、UML实例图

    clip_image002

    注意点:(工厂类与基类为关联关系)

    五、示例源码

       1: (工厂类与基类为关联关系)
       2: 例:
       3: //基类
       4: class COperation
       5: {
       6: public:
       7:     int m_nFirst;
       8:     int m_nSecond;
       9:     virtual double GetResult()
      10:     {
      11:         double dResult=0;
      12:         return dResult;
      13:     }
      14: };
      15: //加法
      16: class AddOperation : public COperation
      17: {
      18: public:
      19:     virtual double GetResult()
      20:     {
      21:         return m_nFirst+m_nSecond;
      22:     }
      23: };
      24: //减法
      25: class SubOperation : public COperation
      26: {
      27: public:
      28:     virtual double GetResult()
      29:     {
      30:         return m_nFirst-m_nSecond;
      31:     }
      32: };
      33:  
      34: //工厂类
      35: class CCalculatorFactory
      36: {
      37: public:
      38:     static COperation* Create(char cOperator);
      39: };
      40:  
      41: COperation* CCalculatorFactory::Create(char cOperator)
      42: {
      43:     COperation *oper;
      44:     //在C#中可以用反射来取消判断时用的switch,在C++中用什么呢?RTTI??
      45:     switch (cOperator)
      46:     {
      47:     case '+':
      48:         oper=new AddOperation();
      49:         break;
      50:     case '-':
      51:         oper=new SubOperation();
      52:         break;
      53:     default:
      54:         oper=new AddOperation();
      55:         break;
      56:     }
      57:     return oper;
      58: }
      59:  
      60: 客户端
      61: int main()
      62: {
      63:     int a,b;
      64:     cin>>a>>b;
      65:     COperation * op=CCalculatorFactory::Create('-');
      66:     op->m_nFirst=a;
      67:     op->m_nSecond=b;
      68:     cout<<op->GetResult()<<endl;
      69:     return 0;
      70: }
  • 相关阅读:
    PHP处理字符中的emoji表情
    CentOS 7 安装 PHP7.2 (LNMP环境搭建第二步)
    php 二维数组按某个字段排序
    JavaScript返回到上一页的方法
    常用正则表达式—手机号码
    JS实现斐波那契列数的三种方法
    常用正则表达式--金额
    PHP中三种设置脚本最大执行时间的方法
    生成指定长度随机字符串
    API常用签名验证方法(PHP实现)
  • 原文地址:https://www.cnblogs.com/steven_oyj/p/1742198.html
Copyright © 2020-2023  润新知