设计模式之简单工厂模式

1、简单工厂设计模式:也就是说,到底要实例化谁,将来会不会增加实例化的对象,这是很容易发生变化的地方,应该考虑用一个单独的类来做这个创建实例的过程,这就是工厂。

UML图如下:




2、C++代码实现

[cpp] view plaincopy
  
  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. /* 运算类 */  
  5. class Operation  
  6. {  
  7. public:  
  8.     //左值  
  9.     double leftValue;  
  10.     //右值  
  11.     double rightValue;  
  12.     //纯虚函数,定义了一个运算结果的接口。  
  13.     virtual double GetResult() = 0;  
  14. };  
  15.   
  16. /* 加法运算类,实现加法接口 */  
  17. class Add : public Operation  
  18. {  
  19. public:  
  20.     double GetResult();  
  21. };  
  22.   
  23. double Add::GetResult()   
  24. {  
  25.     return leftValue + rightValue;  
  26. }  
  27.   
  28. /* 减法运算类,实现减法接口 */  
  29. class Minus : public Operation  
  30. {  
  31. public:  
  32.     double GetResult();  
  33. };  
  34.   
  35. double Minus::GetResult()  
  36. {  
  37.     return leftValue - rightValue;  
  38. }  
  39.   
  40. /* 乘法运算类,实现乘法接口 */  
  41. class Multi : public Operation  
  42. {  
  43. public:  
  44.     double GetResult();  
  45. };  
  46.   
  47. double Multi::GetResult()  
  48. {  
  49.     return leftValue * rightValue;  
  50. }  
  51.   
  52. /* 除法运算类,实现除法接口 */  
  53. class Division : public Operation  
  54. {  
  55. public:  
  56.     double GetResult();  
  57. };  
  58.   
  59. double Division::GetResult()  
  60. {  
  61.     return leftValue / rightValue;  
  62. }  
  63.   
  64. /* 工厂类,根据不同的需求生产不同的运算类 */  
  65. class OperationFactory  
  66. {  
  67. public:  
  68.     Operation *  CreateOperate(char);  
  69. };  
  70.   
  71. Operation * OperationFactory::CreateOperate(char type)  
  72. {  
  73.     switch (type)   
  74.     {  
  75.     case '*':  
  76.             return new Multi();  
  77.         break;  
  78.     case '/':  
  79.             return new Division();  
  80.         break;  
  81.     case '+':  
  82.             return new Add();  
  83.         break;  
  84.     case '-':  
  85.             return new Minus();  
  86.         break;  
  87.     default:  
  88.             return new Add();  
  89.         break;  
  90.     }  
  91. }  
  92.   
  93. int main()  
  94. {  
  95.     int n;  
  96.     freopen("in.txt""r", stdin);  
  97.     OperationFactory factory;  
  98.     scanf("%d", &n);  
  99.     while (n--)   
  100.     {  
  101.         double leftValue;  
  102.         double rightValue;  
  103.         char type;  
  104.         cin >> leftValue >> rightValue >> type;  
  105.         Operation * operation = factory.CreateOperate(type);  
  106.         operation->leftValue = leftValue;  
  107.         operation->rightValue = rightValue;  
  108.         cout << operation->leftValue << " " << type << " "  
  109.             << operation->rightValue << " = " << operation->GetResult() << endl;  
  110.     }  
  111.     return 0;  
  112. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值