概述
- 主要用于创建对象,添加新类时,不会影响以前的代码
- 用一个工厂类来根据输入的条件产生不同的类,然后根据不同类的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 }
实例2
读取xml文件创建对象
https://www.cnblogs.com/cxc1357/p/13023854.html