设计模式1-简单工厂模式

一、简单描述

  工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品;在工厂中加工产品,使用产品的人,不用在乎产品是如何生产出来的。从软件开发的角度来说,这样就有效的降低了模块之间的耦合

二、类图

  

二、适用场景

  1. 在程序中,需要创建的对象很多,导致对象的new操作多且杂时,需要使用简单工厂模式;
  2. 由于对象的创建过程是我们不需要去关心的,而我们注重的是对象的实际操作,所以,我们需要分离对象的创建和操作两部分,如此,方便后期的程序扩展和维护。

三、代码

 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 }
原文地址:https://www.cnblogs.com/457220157-FTD/p/3993484.html