Fork me on GitHub

设计模式——简单工厂模式(C++实现)

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 
 7 class COperator
 8 {
 9 public:
10         virtual double GetResult()=0;
11 
12 public:
13         COperator()
14         {
15         }
16         COperator(double number_a, double number_b): m_numberA(number_a), m_numberB(number_b)
17         {
18         }
19         double m_numberA;
20         double m_numberB;
21 };
22 
23 
24 class CSub: public COperator
25 {
26 public:
27         CSub()
28         {
29         }
30         CSub(double number_a, double number_b): COperator(number_a, number_b)
31         {
32         }
33         virtual double GetResult();
34 };
35 
36 double CSub::GetResult()
37 {
38         return this->m_numberA - this->m_numberB;
39 }
40 
41 
42 class CAdd: public COperator
43 {
44 public:
45         CAdd()
46         {
47         }
48         CAdd(double number_a, double number_b): COperator(number_a, number_b)
49         {
50         }
51         virtual double GetResult();
52 };
53 
54 double CAdd::GetResult()
55 {
56         return m_numberA + m_numberB;
57 }
58 
59 
60 class CFactory
61 {
62 public:
63         static COperator* CreateOperation(char sOpeType);
64 };
65 
66 COperator* CFactory::CreateOperation(char sOpeType)
67 {
68         switch(sOpeType)
69         {
70                 case '-':
71                         return new CSub();
72                         break;
73                 case '+':
74                         return new CAdd();
75                         break;
76                 default:
77                         break;
78         }
79 }
80 
81 
82 int main(void)
83 {
84         COperator* oper = CFactory::CreateOperation('-');
85         oper->m_numberA = 10;
86         oper->m_numberB = 20;
87         cout<< "oper->m_numberA: "<< oper->m_numberA<< endl;
88         cout<< "oper->m_numberB: "<< oper->m_numberB<< endl;
89         cout<< oper->GetResult()<< endl;
90 
91         return 0;
92 }
93 ////////////////////////
94 [root]$ ./2_simple_factory
95 oper->m_numberA: 10
96 oper->m_numberB: 20
97 -10

 

posted @ 2017-04-21 21:05  码农的逼格  阅读(286)  评论(0编辑  收藏  举报