博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

(转载)C++抽象工厂模式(大话设计模式)

Posted on 2010-11-08 19:41  ccmfc  阅读(607)  评论(0编辑  收藏  举报

#include "iostream"
using namespace std;
class IUser
{public:
virtual void fun() = 0;
};
class SqlUser : public IUser
{
public:
void fun(){cout<<"Sql USER"<<endl;}
};
class AcessUser : public IUser
{
public:
void fun(){cout<<"access USER"<<endl;}
};

class IDepartment
{
public:
virtual void fun() = 0;
};
class sqlDepartment : public IDepartment
{
public:
void fun(){cout<<"sql department"<<endl;}
};
class AcessDepartment : public IDepartment
{
public:
void fun(){cout<<"access department"<<endl;}
};

class IFactroy
{
public:
virtual IUser* createUser()=0;
virtual IDepartment* createDepartment()=0;
};
class SQLFactroy : public IFactroy
{
public:
IUser* createUser() {return new SqlUser;}
IDepartment* createDepartment(){return new sqlDepartment;}
};
class AcessFactroy : public IFactroy
{
public:
IUser* createUser(){return new AcessUser;}
IDepartment* createDepartment(){return new AcessDepartment;}
};
//全局函数,功能创建特定产品
IUser* pUser;
IDepartment* pDepart;
void create(IFactroy* p)
{
pDepart = p->createDepartment();
pUser = p->createUser();
}
void main()
{
IFactroy* p = new SQLFactroy;
create(p);
pUser->fun();
pDepart->fun();

cout<<endl;

IFactroy* p1 = new AcessFactroy;
create(p1);
pUser->fun();
pDepart->fun();
}