概述

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

实例1

计算器

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

[设计模式] 简单工厂模式_子类

  • UML图:第一行为类名,第二行为特性(属性),第三行为操作(方法),+表示public,-表示private,#表示protected,斜体代表抽象类,实线+空心三角为继承关系,实线+箭头为关联关系(工厂类要知道运算类的变化)


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


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文件创建对象