灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3285回复:0

设计模式学习-----抽象工厂模式

楼主#
更多 发布于:2012-12-13 14:43

GOOD:定义了一个创建一系列相关或相互依赖的接口,而无需指定它们的具体类。


用于交换产品系列,如ACCESS->SQLSERVER;


产品的具体类名被具体工厂的实现分离





[html]
#include <string>
#include <iostream>
#include <vector>
using namespace std;

//用户抽象接口
class IUser
{
public :
   virtual void GetUser()=0;
   virtual void InsertUser()=0;
};

//部门抽象接口
class IDepartment
{
public:
   virtual void GetDepartment()=0;
   virtual void InsertDepartment()=0;
};

//ACCESS用户
class CAccessUser : public IUser
{
public:
   virtual void GetUser()
   {
       cout<<"Access GetUser"<<endl;
   }
   virtual void InsertUser()
   {
       cout<<"Access InsertUser"<<endl;
   }
};

//ACCESS部门
class CAccessDepartment : public IDepartment
{
public:
   virtual void GetDepartment()
   {
       cout<<"Access GetDepartment"<<endl;
   }
   virtual void InsertDepartment()
   {
       cout<<"Access InsertDepartment"<<endl;
   }
};

//SQL用户
class CSqlUser : public IUser
{
public:
   virtual void GetUser()
   {
       cout<<"Sql User"<<endl;
   }
   virtual void InsertUser()
   {
       cout<<"Sql User"<<endl;
   }
};

//SQL部门类
class CSqlDepartment: public IDepartment
{
public:
   virtual void GetDepartment()
   {
       cout<<"sql getDepartment"<<endl;
   }
   virtual void InsertDepartment()
   {
       cout<<"sql insertdepartment"<<endl;
   }
};

//抽象工厂
class IFactory
{
public:
   virtual IUser* CreateUser()=0;
   virtual IDepartment* CreateDepartment()=0;
};

//ACCESS工厂
class AccessFactory : public IFactory
{
public:
   virtual IUser* CreateUser()
   {
       return new  CAccessUser();
   }
   virtual IDepartment* CreateDepartment()
   {
       return new CAccessDepartment();
   }
};

//SQL工厂
class SqlFactory : public IFactory
{
public:
   virtual IUser* CreateUser()
   {
       return new  CSqlUser();
   }

   virtual IDepartment* CreateDepartment()
   {
       return new CSqlDepartment();
   }
};

//客户端:
int main()
{
   IFactory* factory= new SqlFactory();
   IUser* user=factory->CreateUser();
   IDepartment* depart = factory->CreateDepartment();
   user->GetUser();
   depart->GetDepartment();
   return 0;
}

喜欢0 评分0
游客

返回顶部