设计模式之(十一、抽象工厂模式Abstract Factory)
来源:互联网 发布:日军 知乎 编辑:程序博客网 时间:2024/05/21 00:44
设计模式之十一、抽象工厂模式Abstract Factory
适用范围:
与之前学过的工厂方法模式类似,当涉及到多个产品系列的问题时,就成为了抽象工厂模式。提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
书中的实例:
当涉及到使用到的各种数据库时,比如说,SqlServer、Oracle、MySql等等,可以简单地实现各个数据库间的切换。
抽象工厂模式的结构图如下:
C++关键代码实现如下:
1、工厂接口类IFactory.h
virtual IProductA* CreateProductA() = 0;
virtual IProductB* CreateProductB() = 0;
2、两个产品的接口类IProductA. IProductB。
3、具体的工厂实现类CConcreteFactoryA1.cpp
实现父接口IFactory
IProductA *CConcreteFactoryA::CreateProductA()
{
return (IProductA*)new CConcreteProductA1();
}
IProductB *CConcreteFactoryA::CreateProductB()
{
return (IProductB*)new CConcreateProductB1();
}
4、具体的工厂实现类CConcreteFactoryB.cpp
实现父接口IFactory。
IProductA *CConcreteFactoryB::CreateProductA()
{
return (IProductA*)new CConcreteProductA2();
}
IProductB *CConcreteFactoryB::CreateProductB()
{
return (IProductB*)new CConcreateProductB2();
}
5、具体的产品类的实现CConcreteProductA1.cpp
在构造函数中打印出提示信息.
CConcreteProductA1::CConcreteProductA1()
{
cout<<"初始化产品A1..."<<endl;
}
其它具体产品类与此类似,在此不累述.
6、客户端代码main.cpp
IFactory *f = new CConcreteFactoryA();
IProductA *p1 = f->CreateProductA();
IProductB *p2 = f->CreateProductB();
IFactory *f2 = new CConcreteFactoryB();
IProductA *p3 = f2->CreateProductA();
IProductB *p4 = f2->CreateProductB();
if(p1 != NULL)
{
delete p1;
}
if(p2 != NULL)
{
delete p2;
}
if(p3 != NULL)
{
delete p3;
}
if(p4 != NULL)
{
delete p4;
}
if(f != NULL)
{
delete f;
}
if(f2 != NULL)
{
delete f2;
}
其实可以看出,它的实现与我们之前学过的工厂方法模式没有太大出入,只是调用的对象多了而已。
在此其实也可以简化各个接口类,可以和简单工厂模式结合使用,通过switch语句来判断,到底需要实例化哪个子对象。
另外,还可以通过反射+抽象工厂的方式来实现,我看到了C#代码的实现,但是具体应该如何用C++来实现我还真不清楚。
另一种方式,也可以用反射+配置文件的方式来实现,这种用法在我们项目中也经常使用。特别是配合各种数据库信息、服务器信息、端口信息之类的都是在配置文件中进行配置的。
以上。
- 设计模式之(十一、抽象工厂模式Abstract Factory)
- 设计模式之十一:抽象工厂模式(Abstract Factory)
- 【设计模式】之 Abstract Factory 抽象工厂
- 设计模式之:抽象工厂(Abstract Factory)
- 设计模式之抽象工厂Abstract Factory
- 设计模式之抽象工厂Abstract Factory
- 设计模式笔记之工厂模式--抽象工厂(Abstract Factory)
- 设计模式-抽象工厂模式(Abstract Factory)
- 设计模式:抽象工厂模式(Abstract Factory)
- .Net设计模式之抽象工厂模式(Abstract Factory)
- Net设计模式之抽象工厂模式(Abstract Factory Pattern)
- 设计模式(二)之Abstract Factory - 抽象工厂模式
- 设计模式读书笔记之抽象工厂模式(Abstract Factory)
- 设计模式之二(抽象工厂模式)(Abstract Factory)
- Java设计模式之抽象工厂(Abstract Factory)模式
- JAVA设计模式之抽象工厂(Abstract Factory)模式
- 设计模式-创建型模式之 Abstract Factory(抽象工厂)
- 设计模式之六 --- 抽象工厂模式(Abstract Factory)
- SEM广告基础优化策略
- 【转】javascript里的document.all用法
- menu控件在ie8中动态菜单显示不了
- WPF 控件移动时抖动的问题
- 把sql server 数据库的数据导入access数据库
- 设计模式之(十一、抽象工厂模式Abstract Factory)
- javascript和css在ie和firefox中关于兼容性问题的解决办法
- 辩驳一个默认的说法:IE6不支持!important (转http://www.cnblogs.com/lanyueer/archive/2011/03/29/1998398.html)
- Gedit中文乱码
- WebService的 HelloWorld : XFire , JAX-WS , JSR181
- 【转】在eclipse中用jdbc连sql server2005
- Printing Architecture
- CBitmap和HBITMAP的区别及相互转换方法
- swap & complete permutation