设计模式(十一)抽象工厂模式
2016-04-30 23:57
375 查看
(十一)抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
#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();
//IFactory* factory= new AccessFactory();
IUser* user=factory->CreateUser();
IDepartment* depart = factory->CreateDepartment();
user->GetUser();
depart->GetDepartment();
delete user;
delete depart;
delete factory;
return 0;
}
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
#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();
//IFactory* factory= new AccessFactory();
IUser* user=factory->CreateUser();
IDepartment* depart = factory->CreateDepartment();
user->GetUser();
depart->GetDepartment();
delete user;
delete depart;
delete factory;
return 0;
}
相关文章推荐
- 时间下拉框——时间控件四部曲(3)
- 谈李宁品牌重塑失败的因素(整合)
- HdU 2544 最短路
- 73. Set Matrix Zeroes
- Linux.fedora23.WORKSTATION简易安装教程(WIN10+Linux双系统)
- C++中的 Round(),floor(),ceil()
- 请编写一个算法,若MxN矩阵中某个元素为0,则将其所在的行与列清零。 给定一个MxN的int[][]矩阵(C++中为vector>)mat和矩阵的阶数n,请返回完成操作后的int[][]矩阵(C++中
- Servlet初识
- LUA OOP编程实现方法
- spring boot 集成springmvc视图技术
- Unity Official Tutorial OF PICKING UP COLLECTABLES --- Camera Follows Player
- 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。
- 逆波兰计算器与中缀表达式向后缀表达式的转化实例
- HDU_2295_Radar(DancingLinksX重复覆盖+二分)
- hiho第九十六周 数论五·欧拉函数
- js中的$和#
- eclipse中的server location灰色如何修改?
- 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
- ubuntu14.04 Nvidia 驱动和cuda安装(转)
- VO ,PO ,BO,QO, DAO ,POJO,概念