您的位置:首页 > 其它

设计模式之抽象工厂模式

2012-06-07 14:19 302 查看
目标:定义了一个创建一系列相关或相互依赖的接口,而无需指定它们的具体类。

用于交换产品系列,如 ACCESS­>SQL SERVER;

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



下面是示例代码:

#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 GetUser" << endl;

}

virtual void InsertUser()

{

cout << "Sql InsertUser" << 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();

IFactory* access_factory = new AccessFactory();

IUser* access_user = access_factory->CreateUser();

IDepartment* access_depart = access_factory->CreateDepartment();

access_user->GetUser();

access_depart->GetDepartment();

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: