一.简单工厂模式又称静态工厂方法模式(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;
}