简单工厂模式

理论

简单工厂模式又叫静态方法模式(因为工厂类定义了一个静态方法)。现实生活中,工厂是负责生产产品的。同样在设计模式中,简单工厂模式我们可以理解为负责生产对象的一个类,称为“工厂类”。

作用:

将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的类,从而避免了在客户端代码中显式指定,实现了解耦。

实例

用任意一种面向对象语言实现一个计算器控制台程序

UML类图

 实现代码

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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <iostream>
#include <string>
using namespace std;
 
class Operation
{
public:
    void GetNumber(double num1, double num2)
    {
        number_A = num1;
        number_B = num2;
    }
 
    virtual double GetResult() = 0;
 
protected:
    double number_A;
    double number_B;
};
 
class OperationAdd :public Operation
{
public:
    double GetResult()
    {
        return number_A + number_B;
    }
};
 
class OperationSub :public Operation
{
public:
    double GetResult()
    {
        return number_A - number_B;
    }
};
 
class OperationMul :public Operation
{
public:
    double GetResult()
    {
        return number_A * number_B;
    }
};
 
class OperationDiv :public Operation
{
public:
    double GetResult()
    {
        if (number_B == 0)
        {
            cout << "除数不能为0" << endl;
            exit(0);
        }
        return number_A / number_B;
    }
};
 
//工厂类
class OperationFactory
{
public:
    static Operation* cerateOperate(char operate)
    {
        switch (operate)
        {
        case('+'):
            return new OperationAdd;
        case('-'):
            return new OperationSub;
        case('*'):
            return new OperationMul;
        case('/'):
            return new OperationDiv;
        default:
            break;
        }
    }
};
 
void test()
{
    double num1, num2;
    char choice;
    cout << "请输入第一个数:" << endl;
    cin >> num1;
    cout << "您想进行的运算是:" << endl;
    cin >> choice;
    cout << "请输入第二个数:" << endl;
    cin >> num2;
 
    double result = 0;
    OperationFactory factory;
    Operation* operate = factory.cerateOperate(choice); //父类指针指向子类对象
    operate->GetNumber(num1, num2);
    result = operate->GetResult();
    cout << "num1 " << choice << " num2 = " << result << endl;
 
    delete operate;
}
 
int main()
{
    test();
 
    system("pause");
    return 0;
}

  

posted @   KYZH  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示

目录导航