设计模式之简单工厂模式
原文链接:https://blog.csdn.net/qq_39355828/article/details/110840802 (opens new window)
# 设计模式
# 1.简单工厂模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DbUh6oCi-1607346266743)(C:\Users\123\AppData\Roaming\Typora\typora-user-images\1605525525702.png)]
简单工厂模式:父类有两个参数,计算结果参数需要重载。有四个类继承父类 重写了结果的计算方式。工厂类根据传进来的参数进行类的生成。生成的类返回给主函数,这里使用引用方式。用到了父类一定是子类的概念 可以指代不同的工厂生成的子类。
/*所有用到类的代码*/
#ifndef ADD_SUB_MUI_DIV_H
#define ADD_SUB_MUI_DIV_H
#include<string.h>
class Operation{
public : double _numbleA=0;
public : double _numberB=0;
public : void setValue(double _VnumbleA,double _VnumbleB)
{
_numbleA=_VnumbleA;
_numberB=_VnumbleB;
}
public: virtual double GetResult()//含有纯虚函数的类为抽象类,抽象类不能实例化对象
{
double result =0;
return result;
}
};
class OperationAdd :public Operation {
public : double GetResult()
{
double result =0;
result=_numbleA+_numberB;
return result;
}
};
class OperationSUB:public Operation{
public : double GetResult()
{
double result =0;
result=_numbleA-_numberB;
return result;
}
};
class OperationMUI:public Operation{
public : double GetResult()
{
double result =0;
result=_numbleA*_numberB;
return result;
}
};
class OperationDIV:public Operation{
public : double GetResult()
{
double result =0;
result=_numbleA/_numberB;
return result;
}
};
class OperationFactory
{
public : Operation* CreateOperate (char operate)
{ Operation *oper=NULL;
switch(operate)
{
case '+':
oper=new OperationAdd();
break;
case '-':
oper=new OperationSUB();
break;
case '*':
oper=new OperationMUI();
break;
case '/':
oper=new OperationDIV();
break;
}
return oper;
}
};
#endif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
主函数
#include <iostream>
#include"cmake-build-debug/ADD_SUB_MUI_DIV.h"
using namespace std;
int main() {
OperationFactory oper;
char opee='/';
Operation * opop=oper.CreateOperate(opee);
double NumberA=5,NumberB=5;
opop->setValue(NumberA,NumberB);
double result=opop->GetResult();
cout<<result<<endl;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
编辑 (opens new window)
上次更新: 2026/08/11, 13:36:18