首页 > 代码库 > 简单工厂模式(静态工厂方法模式)

简单工厂模式(静态工厂方法模式)

以计算器程序为例:只需输入运算符号,程序就实例化出合适的对象。通过多态,返回父类的方式实现了计算器的结果。

1)静态工厂方法统一管理对象的创建。

  静态工厂方法通过传入的参数判断决定创建哪一个产品的实例,封装了对象的创建,客户端只管消费,实现了对责任(模块)的分割。

2)静态工厂方法推迟了产品的实例化。

  通过XML配置文件就能改变具体创建的产品实例,修改为其他的产品实例,代码不须重新编译。

技术分享

              简单工厂模式结构图

C++代码实例实现:

  1 #include<iostream>  2 using namespace std;  3   4 class Operation{  5 private:  6     double numberA;  7     double numberB;  8 public:  9     Operation(); 10     double GetNumberA(); 11     void SetNumberA(double); 12     double GetNumberB(); 13     void SetNumberB(double); 14     virtual double GetResult() 15     { 16         double result = 0; 17         return result; 18     } 19 }; 20 //函数实现 21 Operation::Operation() 22 { 23     numberA = 0; 24     numberB = 0; 25 } 26 double Operation::GetNumberA() 27 { 28     return numberA; 29 } 30 void Operation::SetNumberA(double a) 31 { 32     numberA = a; 33 } 34  35 double Operation::GetNumberB() 36 { 37     return numberB; 38 } 39 void Operation::SetNumberB(double b) 40 { 41     numberB = b; 42 } 43   44 class OperationAdd : public Operation 45 { 46 public: 47     virtual double GetResult() 48     { 49         double result = 0; 50         result = GetNumberA() + GetNumberB(); 51         return result; 52     } 53 }; 54 class OperationSub : public Operation 55 { 56 public: 57     virtual double GetResult() 58     { 59         double result = 0; 60         result = GetNumberA() - GetNumberB(); 61         return result; 62     } 63 }; 64 class OperationMul : public Operation 65 { 66 public: 67     virtual double GetResult() 68     { 69         double result = 0; 70         result = GetNumberA() * GetNumberB(); 71         return result; 72     } 73 }; 74 class OperationDiv : public Operation 75 { 76 public: 77     virtual double GetResult() 78     { 79         double result = 0; 80         if(GetNumberB() == 0) 81             return -1; 82         result = GetNumberA() / GetNumberB(); 83         return result; 84     } 85 }; 86 //工厂类 87 class OperationFactory 88 { 89 public: 90     //静态工厂方法 91     static Operation* createOperate(char c) 92     { 93         switch(c) 94         { 95         case +: 96             return new OperationAdd(); 97             break; 98         case -: 99             return new OperationSub();100             break;101         case *:102             return new OperationMul();103             break;104         case /:105             return new OperationDiv();106             break;107         }108         return NULL;109     }110 111 };112 void main()113 {//客户端代码114     115     OperationFactory operfactory;116     Operation *oper = operfactory.createOperate(+); 117     oper->SetNumberA(2);118     oper->SetNumberB(4);119     double result = oper->GetResult();120     cout << result <<endl;121 }

 这样就实现了后台代码与界面实现代码的隔离。不管是控制台程序,Windows程序,Web程序,都可以用客户端代码实现计算器的功能。界面的修改与运算程序无关。如果我们要更改加法运算,只需改OperationAdd类就可以,如果需要增加复杂运算,只需增加相应的运算子类并修改运算类工厂,在switch中加入一个分支就可以。

简单工厂模式(静态工厂方法模式)