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

图 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
浙公网安备 33010602011771号