设计模式之抽象工厂模式 C++实现

xiaoxiao2021-02-28  49

    前面两篇文章分别介绍了,简单工厂模式以及工厂方法模式。接下来我将介绍一下,抽象工厂模式。抽象工厂模式主要用于具有复杂层级和分类的设计中。比如,分别把网卡驱动和声卡驱动当作一种product。那windows和linux以及mac都需要这两种product。此类设计使用抽象工厂模式最合适不过。抽象工厂模式比较易于交换产品系列。

    UML图如下。

从UML图中可以看出,想要某xie li

具体实现代码如下。

工厂类设计

//factory #pragma once #include "product.h" class AbstractFactory { public: AbstractFactory(); virtual AbstractProductA* createProductA() = 0; virtual AbstractProductB* createProductB() = 0; }; class Factory1 : public AbstractFactory { public: Factory1(); AbstractProductA* createProductA() { return new ProductA1; }; AbstractProductB* createProductB() { return new ProductB1(); } }; class Factory2 : public AbstractProductB { public: Factory2(); AbstractProductA* createProductA() { return new ProductA2; } AbstractProductB* createProductB() { return new ProductB2; } };

产品类设计

//product #pragma once class AbstractProductA { public: AbstractProductA(){}; virtual void operation()=0; }; class ProductA1:public AbstractProductA { public: ProductA1(){}; void operation() { }; }; class ProductA2:public AbstractProductA { public: ProductA2(){}; void operation(){}; }; class AbstractProductB { public: AbstractProductB(){}; virtual void operation() = 0; }; class ProductB1:public AbstractProductB { public: ProductB1(){}; void operation(){}; }; class ProductB2:public AbstractProductB { public: ProductB2(){}; void operation(){}; };

主函数中使用

#include "factory.h" int main(int argc, char* argv[]) { AbstractFactory* factory = new Factory1; AbstractProductA* productA1 = factory->createProductA(); AbstractProductB* productB1 = factory->createProductB(); productA1->operation(); productB1->operation(); return 0; }

    以上便是抽象工厂模式的整个介绍。当然这种方法仍有弊端,比如要增加某个产品,那么最少需要改变三个类。这样会加大工作量,所以具体设计过程中仍然需要具体考虑,将其设计与其他设计模式融合,设计出最符合自己需求的模式。

转载请注明原文地址: https://www.6miu.com/read-2626338.html

最新回复(0)