简单工厂模式

简单工厂模式实例
这是一个简单工厂模式的代码,写得内容很简单,就是实现两个数的加、减、乘、除,刚开始的时候感觉很简单,但是自己动手之后就会看到很多的问题,好比父类中的两个成员变量是私有还是公有,以及在编写的时候需要几个类等等,所以还是觉得得要自己动手写一下会好一些。
简单工厂模式实例类图

              

图 01 简单工厂模式实例

简单工厂模式实例实现代码

 1 #include "iostream"
  2 using namespace std;
  3 
  4 // 父类
  5 class Operate
  6 {
  7 private:
  8     double numberA;
  9     double numberB;
 10 public:
 11     Operate()
 12     {
 13         numberA = 0;
 14         numberB = 0;
 15     }
 16     inline double GetNumberA() const
 17     {
 18         return numberA;
 19     }
 20 
 21     inline double GetNumberB() const
 22     {
 23         return numberB;
 24     }
 25     
 26     inline void SetNumberB(double numberB)
 27     {
 28         this->numberB = numberB;
 29     }
 30 
 31     inline void SetNumberA(double numberA)
 32     {
 33         this->numberA = numberA;
 34     }
 35     
 36     // 计算结果
 37     inline virtual double GetResult()
 38     {
 39         return 0.0;
 40     }
 41 };
 42 
 43 //
 44 class OperateAdd : public Operate
 45 {
 46 public:
 47     virtual double GetResult()
 48     {
 49         return GetNumberA() + GetNumberB();
 50     }
 51 };
 52 
 53 //
 54 class OperateSub : public Operate
 55 {
 56 public:
 57     double GetResult()
 58     {
 59         return this->GetNumberA() - this->GetNumberB();
 60     }
 61 };
 62 
 63 //
 64 class OperateMul : public Operate
 65 {
 66 public:
 67     double GetResult()
 68     {
 69         return this->GetNumberA() * this->GetNumberB();
 70     }
 71 };
 72 
 73 //
 74 class OperateDiv : public Operate
 75 {
 76 public:
 77     double GetResult()
 78     {
 79         return this->GetNumberA() / this->GetNumberB();
 80     }
 81 };
 82 
 83 // 工厂类
 84 class Factory
 85 {
 86 public:
 87     Factory()
 88     {
 89     }
 90     static Operate* CreatFactory(char op);
 91 };
 92 
 93 
 94 Operate* Factory::CreatFactory(char op)
 95 {
 96     Operate* operate = NULL;
 97     switch(op)
 98     {
 99     case '+':
100         operate = new OperateAdd();
101         break;
102     case '-':
103         operate = new OperateSub();
104         break;
105     case '*':
106         operate = new OperateMul();
107         break;
108     case '/':
109         operate = new OperateDiv();
110         break;
111     default:
112         break;
113     }
114     return operate;
115 }
116 
117 void main()
118 {
119     Operate* operate = Factory::CreatFactory('/');
120     operate->SetNumberB(2.0);
121     operate->SetNumberA(142.0);
122     cout << operate->GetResult() << endl;
123 
124     cout<<sizeof(Operate)<<endl;
125     cout<<sizeof(OperateAdd)<<endl;
126     delete operate;
127 }

2014-11-19 20:45:49

posted on 2014-11-19 20:42  xiaoheike  阅读(250)  评论(0)    收藏  举报

导航