简单工厂模式
理论
简单工厂模式又叫静态方法模式(因为工厂类定义了一个静态方法)。现实生活中,工厂是负责生产产品的。同样在设计模式中,简单工厂模式我们可以理解为负责生产对象的一个类,称为“工厂类”。
作用:
将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的类,从而避免了在客户端代码中显式指定,实现了解耦。
实例
用任意一种面向对象语言实现一个计算器控制台程序
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; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人