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

概述

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

原文地址:https://www.cnblogs.com/cxc1357/p/12249376.html