设计模式 - 简单工厂模式(C++)

来源:互联网 发布:薛之谦和周杰伦知乎 编辑:程序博客网 时间:2024/04/28 00:46

一.简单工厂模式又称静态工厂方法模式(Static Factory Method),它不是Gof 所讲的23种设计模式之一,但是它却是我们在编码过程中经常使用的方法之一。

 

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

2.静态工厂方法推迟了产品的实例化。
通过XML配置文件就能改变具体要创建的产品实例,修改为其它的产品实例,代码不须重新编译。

classFile.h

#pragma onceclass basicObject{public:basicObject(void);~basicObject(void);virtual int operation_function(int a,int b);private:int tempa;int tempb;};class addObject : public basicObject{public:addObject(void){};~addObject(void){};virtual int operation_function(int a,int b);};class subObject : public basicObject{public:subObject(void){};~subObject(void){};virtual int operation_function(int a,int b);};class mulObject : public basicObject{public:mulObject(){};~mulObject(){};virtual int operation_function(int a,int b);};class divObject : public basicObject{public:divObject(){};~divObject(){};virtual int operation_function(int a,int b);};class tochObject : public basicObject{public:tochObject(){};~tochObject(){};virtual int operation_function(int a,int b);};class ArithOperatorFactory{public:ArithOperatorFactory(){};~ArithOperatorFactory(){};basicObject* CreateArithOperator(const char chsrc);};
classFile.cpp#include "StdAfx.h"#include "classFile.h"basicObject::basicObject(void) : tempa(0),tempb(0){}basicObject::~basicObject(void){}int basicObject::operation_function(int a,int b){return 0;}int addObject::operation_function(int a,int b){return a + b;}int subObject::operation_function(int a,int b){return a - b;}int mulObject::operation_function(int a,int b){return a * b;}int divObject::operation_function(int a,int b){return a / b;}int tochObject::operation_function(int a,int b){return a % b;}basicObject * ArithOperatorFactory::CreateArithOperator(const char chsrc){basicObject *obj;switch(chsrc){case '+':obj = new addObject;break;case '-':obj = new subObject;break;case '*':obj = new mulObject;break;case '/':obj = new divObject;break;case '%':obj = new tochObject;break;default:obj = NULL;break;}return obj;}
main.cpp#include "classFile.h"#include <iostream>#include <stdlib.h>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ArithOperatorFactory * factoryObj = new ArithOperatorFactory;basicObject * addObj = factoryObj->CreateArithOperator('+');if (addObj == NULL){return 0;}int k = addObj->operation_function(20, 30);cout << "k = " << k << endl;system("pause");return 0;}