#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; }