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

Posted cxc1357

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[设计模式] 简单工厂模式相关的知识,希望对你有一定的参考价值。

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

 

以上是关于[设计模式] 简单工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式之简单工厂模式

设计模式-简单工厂工厂方法模式抽象工厂模式详解

Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---工厂模式之简单工厂

C#之三十八 简单工厂设计模式

设计模式之简单工厂模式