美文网首页设计模式设计模式 BY C++程序员
【C++ 设计模式】2.抽象工厂模式

【C++ 设计模式】2.抽象工厂模式

作者: JeremyYv | 来源:发表于2019-10-12 23:42 被阅读0次
  • 抽象工厂模式:一种创建型设计模式


  • 应用场景:
    工厂方法模式之上,考虑到每一种产品就要有一个工厂,产品扩展种类时会增加大量的类,难于管理,对一种情景提出了抽象工厂模式:

    原本生产木桌和木椅的工厂,要增加铁桌和铁椅这两种产品种类。
    如果使用工厂方法模式,则需要在原本两个工厂的基础上,再增加两个工厂。
    而此时可以将一个工厂定位为木质工厂,另一个工厂为铁质工厂,两个工厂分别都有桌和椅两条生产线。

  • 实现方式:
    工厂方法模式的工厂抽象类中增加生产产品的接口,并在工厂实现类中实现具体的生产操作。

  • 优点:
    便于扩展已有产品的系列。

  • 缺点:
    增加新的产品类型时(已有桌、椅,要增加门),需要修改所有工厂。


以下是抽象工厂模式的简易代码实现
// AbstractFactory.hpp
#include <iostream>
using namespace std;

// 产品A抽象类
class Desk {
public:
    virtual void Show() = 0;
};

// 产品B抽象类
class Chair {
public:
    virtual void Show() = 0;
};

class WoodDesk: public Desk {
public:
    void Show() {
        cout << "WoodDesk" << endl;
    }
};

class IronDesk: public Desk {
public:
    void Show() {
        cout << "IronDesk" << endl;
    }
};

class WoodChair: public Chair {
public:
    void Show() {
        cout << "WoodChair" << endl;
    }
};

class IronChair: public Chair {
public:
    void Show() {
        cout << "IronChair" << endl;
    }
};

// 工厂抽象类
class Factory {
public:
    virtual Desk* CreateDesk() = 0;
    virtual Chair* CreateChair() = 0;
};

// 生产木质产品的工厂
class WoodFactory: public Factory {
public:
    Desk* CreateDesk() {
        return new WoodDesk();
    }

    Chair* CreateChair() {
        return new WoodChair();
    }
};

// 生产铁质产品的工厂
class IronFactory: public Factory {
public:
    Desk* CreateDesk() {
        return new IronDesk();
    }

    Chair* CreateChair() {
        return new IronChair();
    }
};
主函数中的使用
#include "AbstractFactory.hpp"

int main()
{
    Factory* FactoryWood = new WoodFactory();
    // 木工厂生产木桌
    Desk* DeskWood = FactoryWood->CreateDesk();
    DeskWood->Show();
 
    Factory* FactoryIron = new IronFactory();
    // 铁工厂生产铁椅
    Chair* ChairIron = FactoryIron->CreateChair();
    ChairIron->Show();
 
    if (NULL != FactoryWood) {
        delete FactoryWood;
        FactoryWood = NULL;
    }
    if (NULL != FactoryIron) {
        delete FactoryIron;
        FactoryIron  = NULL;
    }
    return 0;
}
控制台输出结果
WoodDesk
IronChair

相关文章

网友评论

    本文标题:【C++ 设计模式】2.抽象工厂模式

    本文链接:https://www.haomeiwen.com/subject/juzcmctx.html