您的位置:首页 > 编程语言 > C语言/C++

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

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


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

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

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

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

#pragma once
class 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;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: