抽象工厂模式

2014-11-23 20:19:17 · 作者: · 浏览: 16
抽象工厂模式,提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类。 vcq508PNrNK7uPa5pLOntci8tr3hubm4utTw1eLQqbK7zayy+sa3tci8tr3hubmy+sa3ttTP87XEtLS9qKGjCiAgICAgINLytMvDv7j2uaSzp73Hyau2vNDo0qrM4bmpwb249rvy0tTJz7XEuaSzp7e9t6ijrLfWsfDTw9PatLS9qMG9uPa1yLy2veG5ubXEsvrGt6GjCjxzdHJvbmc+s+nP87mks6fEo8q90+u5pLOnt723qMSjyr21xMf4sfCjujwvc3Ryb25nPgoKCrmks6e3vbeoxKPKvda709DSu7j2s+nP87L6xrfA4KOstviz6c/zuaSzp8Sjyr3T0LbguPaho7mks6e3vbeoxKPKvbXEvt/M5bmks6fA4Na7xNy0tL2o0ru49r7fzOWy+sa3wOC1xMq1wP2jrLb4s+nP87mks6fEo8q9v8nS1LS0vai24Lj2oaOz6c/zuaSzp7K7xNzWsb3TtLS9qLL6xrejrNa7xNy0tL2ouaSzp6OsvMiz6c/zuaSzp7S0vai1xLL6xrfKx7mks6eho8vkyLvL+9KytqjS5cHLtLS9qLL6xre1xLe9t6ijrLWr0OjSqrS0vaiz9sC0tcS+38zluaSzp8q1z9ajrLzIs+nP87mks6e0tL2os/a1xLmks6e0tL2osvrGt6GjCgo8c3Ryb25nPtOm08Ozob6wo7o8L3N0cm9uZz4KICAgICAg1qez1rbg1tbK/b7dv+K1xMr9vt2/4r3Tv9q3w87KsuOhowo8c3Ryb25nPsq1wP294bm5zbyjujwvc3Ryb25nPgo8aW1nIHNyYz0="https://www.cppentry.com/upload_files/article/76/1_xemen__.jpg" alt="\">
代码: //AbstractFactory.h
#include "stdafx.h"
#include 
  
   
using namespace std;
 
//user产品族
class CUser
{
public:
	virtual ~CUser(){}
	virtual void Operator() = 0;
};

class CSqlServerUser :public CUser
{
public:
	virtual void Operator()
	{
		cout << "SqlServer的User操作!" << endl;
	}
};

class CAccessUser :public CUser
{
public:
	virtual void Operator()
	{
		cout << "Access的User操作!" << endl;
	}
};
//Department产品族
class CDepartment
{
public:
	virtual ~CDepartment(){}
	virtual void Operator() = 0;
};

class CSqlServerDepartment :public CDepartment
{
public:
	virtual void Operator()
	{
		cout << "SqlServer的Department操作!" << endl;
	}
};

class CAccessDepartment :public CDepartment
{
public :
	virtual void Operator()
	{
		cout << "Access的Department操作!" << endl;
	}
};

//抽象工厂,可以使用智能指针管理new的资源,此处为了侧重模式方法,不用
class CFactory
{
public:
	virtual ~CFactory(){}

	virtual CUser* CreateUser() = 0;
	virtual CDepartment* CreateDepartment() = 0;
};
//具体产品工厂
class CSqlServerFactory :public CFactory
{
public:
	virtual CUser* CreateUser()
	{
		return new CSqlServerUser();
	}

	virtual CDepartment* CreateDepartment()
	{
		return new CSqlServerDepartment();
	}
};

class CAccessFactory :public CFactory
{
public:
	virtual CUser* CreateUser()
	{
		return new CAccessUser();
	}

	virtual CDepartment* CreateDepartment()
	{
		return new CAccessDepartment();
	}
};
  
// AbstractFactoryPattern.cpp
// AbstractFactoryPattern.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "AbstractFactory.h"


int _tmain(int argc, _TCHAR* argv[])
{
	CFactory *Factory = new CSqlServerFactory();
	//此时与具体的类型解除了依赖
	CUser *pUser = Factory->CreateUser();
	pUser->Operator();
	delete(pUser);
	CDepartment *pDep = Factory->CreateDepartment();
	pDep->Operator();
	delete(pDep);

	//
	Factory = new CAccessFactory();
	pUser = Factory->CreateUser();
	pUser->Operator();
	delete(pUser);
	pDep = Factory->CreateDepartment();
	pDep->Operator();
	delete(pDep);
	getchar();
	return 0;
}