• [设计模式] 简单工厂模式


    概述

    • 主要用于创建对象,添加新类时,不会影响以前的代码
    • 用一个工厂类来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果
    • 优点:用于不同情况创建不同类时
    • 缺点:客户端必须知道基类和工厂类,耦合性差

    实例1

    计算器

    • 先定义一个运算类,再把加减乘除法定义成运算类的子类,工厂类用于创造实例

    • UML图:第一行为类名,第二行为特性(属性),第三行为操作(方法),+表示public,-表示private,#表示protected,斜体代表抽象类,实线+空心三角为继承关系,实线+箭头为关联关系(工厂类要知道运算类的变化)
     1 #include <iostream>
     2 using namespace std;
     3 
     4 class COperation{
     5     public:
     6         int A,B;
     7         virtual double GetResult(){
     8             double dResult = 0;
     9             return dResult;
    10         }
    11 };
    12 
    13 // 加法
    14 class AddOperation:public COperation{
    15     public:
    16         virtual double GetResult(){
    17             return A + B;
    18         }        
    19 };
    20 // 减法
    21 class SubOperation:public COperation{
    22     public:
    23         virtual double GetResult(){
    24             return A - B;
    25         }
    26 }; 
    27 // 工厂类
    28 class CCalculatorFactory{
    29     public:
    30         static COperation *Create(char cOperator);
    31 }; 
    32 
    33 COperation* CCalculatorFactory::Create(char cOperator){
    34     COperation *oper;
    35     switch(cOperator){
    36         case '+':
    37             oper = new AddOperation();
    38             break;
    39         case '-':
    40             oper = new SubOperation();
    41             break;
    42         default:
    43             oper = new AddOperation();
    44             break;
    45     }
    46     return oper;
    47 }
    48 
    49 int main(){
    50     int a,b;
    51     cin>>a>>b;
    52     COperation* op = CCalculatorFactory::Create('+');
    53     op->A = a;
    54     op->B = b;
    55     cout << op->GetResult() << endl;
    56     return 0;
    57 }
    View Code

    实例2

    读取xml文件创建对象

    https://www.cnblogs.com/cxc1357/p/13023854.html

  • 相关阅读:
    sublime there are no packages for installation
    linux 安装php扩展mbstring
    生成器表达式和列表推导式
    send()和next()
    迭代器生成器
    装饰器
    函数随笔
    Django进阶
    数据结构与算法入门
    MySQL必会
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12249376.html
Copyright © 2020-2023  润新知