设计模式之(十一、抽象工厂模式Abstract Factory)

设计模式之(十一、抽象工厂模式Abstract Factory),第1张

概述设计模式之十一、抽象工厂模式Abstract Factory 适用范围: 与之前学过的工厂方法模式类似,当涉及到多个产品系列的问题时,就成为了抽象工厂模式。提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 书中的实例: 当涉及到使用到的各种数据库时,比如说,SqlServer、Oracle、MySql等等,可以简单地实现各个数据库间的切换。 抽象工厂模式的结构图如下: C++关

设计模式之十一、抽象工厂模式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)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1181470.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存