码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-02-01 19:03:47      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:根据   vat   影响   ble   缺点   特性   ide   bsp   输入   

  • 主要用于创建对象,添加新类时,不会影响以前的代码
  • 用一个工厂类来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果
  • 优点:用于不同情况创建不同类时
  • 缺点:客户端必须知道基类和工厂类,耦合性差
  • 以计算器程序为例,先定义一个运算类,再把加减乘除法定义成运算类的子类,工厂类用于创造实例

技术图片

 

  • 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

 

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

标签:根据   vat   影响   ble   缺点   特性   ide   bsp   输入   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!