温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++设计模式之抽象工厂模式的详细解析

发布时间:2020-07-21 17:26:15 来源:亿速云 阅读:326 作者:小猪 栏目:开发技术

这篇文章主要讲解了C++设计模式之抽象工厂模式的详细解析,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

抽象工厂模式

模式定义

抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

模式动机

通常是在运行时刻在创建一个ConcreteFactory类的实例,这个具体的工厂再创建具有特定实现的产品对象,也就是说,为创建不同的产品对象,客户端应使用不同的具体工厂。

UML类图

C++设计模式之抽象工厂模式的详细解析

源码实现

abstractproducta.h

#include <string> class AbstracProductA { public: AbstracProductA(); virtual ~AbstracProductA(); void Show(); virtual std::string Name(); }; class ConcreteProductA1 : public AbstracProductA { public: ConcreteProductA1(); std::string Name() override; }; class ConcreteProductA2 : public AbstracProductA { public: ConcreteProductA2(); std::string Name() override; };

abstractfactory.h

#include "abstracproducta.h" #include "abstracproductb.h" class AbstractFactory { public: AbstractFactory(); virtual ~AbstractFactory(); virtual AbstracProductA* CreateProductA() = 0; virtual AbstracProductB* CreateProductB() = 0; }; class ConcreteFactory1 : public AbstractFactory { public: ConcreteFactory1(); AbstracProductA* CreateProductA() override; AbstracProductB* CreateProductB() override; }; class ConcreteFactory2 : public AbstractFactory { public: ConcreteFactory2(); AbstracProductA* CreateProductA() override; AbstracProductB* CreateProductB() override; };

main.cpp

#include <iostream> #include "abstractfactory.h" #include "abstracproducta.h" #include "abstracproductb.h" using namespace std; int main() { AbstractFactory* factory1 = new ConcreteFactory1(); AbstracProductA* pA1 = factory1->CreateProductA(); AbstracProductB* pB1 =factory1->CreateProductB(); pA1->Show(); pB1->Show(); AbstractFactory* factory2 = new ConcreteFactory2(); AbstracProductA* pA2 = factory2->CreateProductA(); AbstracProductB* pB2 =factory2->CreateProductB(); pA2->Show(); pB2->Show(); return 0; }

运行结果

优点

抽象工厂模式的优点

  • 好处是易于交换产品系列,由于具体工厂类,在一个应用中只需要在初始化的时候出现一次,这就使得该百年一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。
  • 它让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。

缺点

模式的缺点

  • 所有在用简单工厂的地方,都可以考虑用反射技术来去除switch或if,接触分支判断带来的耦合。

看完上述内容,是不是对C++设计模式之抽象工厂模式的详细解析有进一步的了解,如果还想学习更多内容,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI