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// AbstractFactoryPattern.cppusing 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 : 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;
}