抽象工厂,工厂方法,简单工厂方法

#include using namespace std;//用户表接口class IUser{public:virtual void Insert() = 0;virtual void GetUser() = 0;};//SqlServer数据库访问User表class SqlServerUser : public IUser{public:void Insert(){cout<<"在SQL Server中给User表增加一条记录"<<endl;}void GetUser(){cout<<"在SQL Server中给User表获取一条记录"<<endl;}};//Access数据库访问User表class AccessUser : public IUser{public:void Insert(){cout<<"在Access中给User表增加一条记录"<<endl;}void GetUser(){cout<<"在Access中User表获取一条记录"<<endl;}};//Department表接口class IDepartment{public:virtual void Insert() = 0;virtual void GetDepartment() = 0;};//SqlServer数据库访问Department表class SqlServerDepartment : public IDepartment{public:void Insert(){cout<<"在SQL Server中给Department表增加一条记录"<<endl;}void GetDepartment(){cout<<"在SQL Server中Department获取一条记录"<<endl;};};//Access数据库访问Department表class AccessDepartment : public IDepartment{public:void Insert(){cout<<"在Access中给Department表增加一条记录"<<endl;}void GetDepartment(){cout<<"在Access中Department获取一条记录"<<endl;};};//抽象工厂接口class IFactory{public:virtual IUser* CreateUser() = 0;virtual IDepartment* CreateDepartment() = 0;};//SqlServer工厂实现class SqlServerFactory : public IFactory{IUser* CreateUser(){return new SqlServerUser();}IDepartment* CreateDepartment(){return new SqlServerDepartment();}};//Access工厂实现class AccessFactory : public IFactory{IUser* CreateUser(){return new AccessUser();}IDepartment* CreateDepartment(){return new AccessDepartment();}};int main(){//创建工厂IFactory * pFactory = NULL;IUser * pUser = NULL;IDepartment * pDepartment = NULL;int choise;cout<<"选择数据库: ";cin>>choise;switch(choise){case 1:pFactory= new SqlServerFactory(); //创建SqlServer访问的工厂break;case 2:pFactory = new AccessFactory(); //创建Access访问的工厂break;}//一致的操作pUser = pFactory->CreateUser();pDepartment= pFactory->CreateDepartment();pUser->Insert();pUser->GetUser();pDepartment->Insert();pDepartment->GetDepartment();return 0;}/*// 简单工厂模式#include using namespace std;class IFactory{public:virtual void Light() = 0;};IFactory *Ifactory = NULL;class CLandFactory : public IFactory{public:CLandFactory(){cout<<"CLandFactory"<<endl;}void Light(){cout<<"This is CLandFactory!"<<endl;}};class CTaiFactory : public IFactory{public:CTaiFactory(){cout<<"CTaiFactory"<<endl;}void Light(){cout<<"This is CTaiFactory!"<<endl;}};bool Create(int n){switch(n){case 1:Ifactory = new CLandFactory();break;case 2:Ifactory = new CTaiFactory();break;}return true;}int main(){int n;cout<<"please input num:"<>n;Create(n);Ifactory->Light();return 0;}*//*// 2 工厂方法#include using namespace std;class LaodProduct;class TaiProduct;class IFactory{public:virtual void CreateFactory() = 0;};class CTaiFactory:public IFactory{public:friend TaiProduct ;TaiProduct *taiProduct;CTaiFactory(){cout<<"CTaiFactory"<<endl;}void CreateFactory(){taiProduct = new TaiProduct();}};class CLaodFactory:public IFactory{public:friend LaodProduct ;LaodProduct *laodProduct;public:CLaodFactory(){cout<<"CLaodFactory"<<endl;}void CreateFactory(){laodProduct = new LaodProduct();}};class IProduct{public:virtual void Product() = 0;};class TaiProduct:public IProduct{public:TaiProduct(){cout<<"TaiProduct"<<endl;}void Product(){cout<<"TaiProduct->Product"<<endl;}};class LaodProduct:public IProduct{public:LaodProduct(){cout<<"LaodProduct()"<<endl;}LaodProduct(int i){cout<<"LaodProduct(int i)"<<endl;}void Product(){cout<<"LaodProduct->Product"<CreateFactory();return 0;} */

你可能感兴趣的:(抽象工厂,工厂方法,简单工厂方法)