一、简单描述
工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品;在工厂中加工产品,使用产品的人,不用在乎产品是如何生产出来的。从软件开发的角度来说,这样就有效的降低了模块之间的耦合。
二、类图
二、适用场景
- 在程序中,需要创建的对象很多,导致对象的new操作多且杂时,需要使用简单工厂模式;
- 由于对象的创建过程是我们不需要去关心的,而我们注重的是对象的实际操作,所以,我们需要分离对象的创建和操作两部分,如此,方便后期的程序扩展和维护。
三、代码
1 #include <iostream> 2 class Calculator { 3 public: 4 Calculator() : number1(0), number2(0) {} 5 Calculator(int n1, int n2) : number1(n1), number2(n2) {} 6 virtual ~Calculator() {} 7 virtual int GetResult() { return 0; } 8 virtual void SetNumber1(int n) { number1 = n; } 9 virtual void SetNumber2(int n) { number2 = n; } 10 protected: 11 int number1; 12 int number2; 13 }; 14 15 16 class Add : public Calculator { 17 public: 18 virtual int GetResult() { 19 return number1 + number2; 20 } 21 }; 22 23 class Plus : public Calculator { 24 public: 25 //这里为了程序简单,就不再判断是否number1>number2,默认number1 > number2 26 virtual int GetResult() { 27 return number1 - number2; 28 } 29 }; 30 31 enum SIGNAL { 32 _add, 33 _plus 34 }; 35 36 class CalculatorFactory { 37 public: 38 Calculator *GetOperator(SIGNAL s) { 39 switch(s) { 40 case _add: 41 calculator = new Add(); //记得要释放指针 42 break; 43 case _plus: 44 calculator = new Plus(); 45 break; 46 } 47 return calculator; 48 } 49 private: 50 Calculator *calculator; //这里必须是指针或者引用,不然无法实现多态 51 }; 52 53 int main() 54 { 55 Calculator *cal = CalculatorFactory().GetOperator(_add); 56 cal->SetNumber1(10); 57 cal->SetNumber2(5); 58 std::cout << "calculator: " << cal->GetResult() << std::endl; 59 delete cal; 60 return 0; 61 }
时间: 2024-10-13 18:21:38