• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
onlyan
#define true false                  
博客园    首页    新随笔    联系   管理    订阅  订阅

简单工厂模式(Simple Factory)

简单工厂模式包含三种角色:

1、工厂(Creator)角色:简单工厂模式的核心,负责实现所有实例的内部逻辑。工厂类可以被外部直接调用,创建所需的产品对象。

2、抽象产品(Product)角色:所有产品对象的父类,负责描述所有实例所共有的接口。

3、具体产品(Concrete Product)角色:所有创建的对象所对应的具体的类。

//SimpleFactory.h
#include <iostream>
#include <string>
using namespace std;

class Operation		//所有运算类的父类
{
protected:
	int numberA;
	int numberB;
public:
	void SetNumberA(int numberA)
	{
		this->numberA = numberA;
	}
	void SetNumberB(int numberB)
	{
		this->numberB = numberB;
	}
	virtual int GetResult()
	{
		return 0;
	}
};

class Add: public Operation		//加运算
{
public:
	virtual int GetResult()
	{
		return numberA + numberB;
	}
};

class Subtract: public Operation	//减运算
{
public:
	virtual int GetResult()
	{
		return numberA - numberB;
	}
};

class Multiply: public Operation	//乘运算
{
public:
	virtual int GetResult()
	{
		return numberA * numberB;
	}
};

class Divide: public Operation		//除运算
{
public:
	virtual int GetResult()
	{
		if (numberB == 0)
		{
			return 0;
		}
		return numberA / numberB;
	}
};

class OperationFactory				//生产运算类的工厂类
{
public:
	static Operation* CreateOperation(char operate)
	{
		Operation *oper;
		switch (operate)
		{
		case '+':
			oper = new Add();
			break;
		case '-':
			oper = new Subtract();
			break;
		case '*':
			oper = new Multiply();
			break;
		case '/':
			oper = new Divide();
			break;
		default:
			oper = NULL;
		}
		return oper;
	}
};

  

//SimpleFactory.cpp
#include "SimpleFactory.h"
using namespace std;

int main()
{
	Operation *oper;
	char operate;
	int numberA, numberB;
	cin>>numberA>>numberB;
	getchar();
	cin>>operate;
	OperationFactory factory;
	oper = factory.CreateOperation(operate);
	oper->SetNumberA(numberA);
	oper->SetNumberB(numberB);
	int result = oper->GetResult();
	cout<<result<<endl;
	return 0;
}

 

优点:工厂类中包含了必要的逻辑判断,根据外界给定的信息决定创建具体的对象。通过工厂类,外界可以从直接创建具体产品对象的局面摆脱出来,仅需要负责消费对象就可以了,而不必考虑这些对象是如何创建和组织的,明确了各自的职责和权利。

缺点:工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新类,则需要改变工厂类。

适用场景:

1、工厂类负责创建的对象比较少。

2、客户只知道传入工厂类的参数,对于如何创建对象不关心。

posted @ 2012-06-30 20:43  onlyan  阅读(156)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3