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

    概述

    • 主要用于创建对象,添加新类时,不会影响以前的代码
    • 用一个工厂类来根据输入的条件产生不同的类,然后根据不同类的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

  • 相关阅读:
    koa学习
    nodejs工作大全
    《程序员周先生之前端开发面试题》
    使用vue技术应当使用的技术和兼容性选择
    IdentityServer4简单入门demo系列 (一)认证服务端
    IdentityServer4客户端获取Token的方法
    wpf 右键菜单的使用
    wpf 在用户控件里,关掉父级窗口
    EntityFramework集成Sqlite的详细步骤
    wpf DataGrid 里的列模版的值绑定
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12249376.html
Copyright © 2011-2022 走看看