现在的位置: 首页 > 综合 > 正文

抽象工厂模式

2018年04月29日 ⁄ 综合 ⁄ 共 1913字 ⁄ 字号 评论关闭
#include <iostream>
using namespace std;

class IUser
{
public:
	IUser(){}
	virtual void InsertUser(IUser *) = 0;
	virtual IUser* GetUser(const int&) = 0;
protected:
	int id;
};

class SQLUser : public IUser
{
public:
	SQLUser(){}
	virtual void InsertUser(IUser *)
	{
		cout << "在SQL中给User表插入一条记录" << endl;
	}
	
	virtual IUser* GetUser(const int&)
	{
		cout << "在SQL中根据ID得到User表一条记录" << endl;
	}
};

class ACCESSUser : public IUser
{
public:
	ACCESSUser(){}
	virtual void InsertUser(IUser *)
	{
		cout << "在ACCESS中给User表插入一条记录" << endl;
	}
	
	virtual IUser* GetUser(const int&)
	{
		cout << "在ACCESS中根据ID得到User表一条记录" << endl;
	}
	
};

class IDepartment
{
public:
	IDepartment(){}
	virtual void InsertDepartment(IDepartment *) = 0;
	virtual IDepartment* GetDepartment(const int&) = 0;
protected:
	int id;	
};

class SQLDepartment : public IDepartment
{
public:
	SQLDepartment(){}
	virtual void InsertDepartment(IDepartment *)
	{
		cout << "在SQL中给Department表插入一条记录" << endl;
	}
	
	virtual IDepartment* GetDepartment(const int&)
	{
		cout << "在SQL中根据ID得到Department表一条记录" << endl;
	}	
};

class ACCESSDepartment : public IDepartment
{
public:
	ACCESSDepartment(){}
	virtual void InsertDepartment(IDepartment *)
	{
		cout << "在ACCESS中给Department表插入一条记录" << endl;
	}
	
	virtual IDepartment* GetDepartment(const int&)
	{
		cout << "在ACCESS中根据ID得到Department表一条记录" << endl;
	}		
};

class IFactory
{
public:
	virtual IUser* CreatUser() = 0;
	virtual IDepartment* CreatDepartment() = 0;
};

class SQLFactory : public IFactory
{
public:

	virtual IUser* CreatUser()
	{
		return new SQLUser();
	}
	
	virtual IDepartment* CreatDepartment()
	{
		return new SQLDepartment();
	}
};

class ACCESSFactory : public IFactory
{
public:
	virtual IUser* CreatUser()
	{
		return new ACCESSUser();
	}
	
	virtual IDepartment* CreatDepartment()
	{
		return new ACCESSDepartment();
	}	
};

int main(void)
{
	IUser *user = new SQLUser();
	IDepartment *dept = new SQLDepartment();
	IDepartment *dept1 = new ACCESSDepartment();
	
	IFactory *factory = new SQLFactory();
	//IFactory *factory = new ACCESSFactory();
	IUser *iu = factory->CreatUser();
	iu->InsertUser(user);
	iu->GetUser(1);
	
	IFactory *factory1 = new ACCESSFactory();
	IDepartment *id = factory1->CreatDepartment();
	id->InsertDepartment(dept1);
	id->GetDepartment(1);
	
	return 0;
}

【上篇】
【下篇】

抱歉!评论已关闭.