美文网首页设计模式设计模式 BY C++程序员
【C++ 设计模式】1-2.工厂方法模式

【C++ 设计模式】1-2.工厂方法模式

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


  • 应用场景:

    简单工厂模式之上,考虑到工厂如果新加产品,需要修改产品类型的枚举,并修改工厂生产产品时,对入参类型判断的代码,当然已验证过的代码被修改后也需要重新验证,违反了开闭原则

    于是工厂方法模式登场:

    将生产模式改为一个工厂只专注于生产一种产品。有新产品则创建新工厂,无需改动原本工厂。

  • 实现方式:

    所有工厂继承自工厂抽象类,均可以生产一种产品。

    如果要制作某种产品,就使用该产品所对应的工厂进行生产。

  • 优点:

    新增产品时,无需改动原本代码,新增产品类与工厂类即可,符合开闭原则。

  • 缺点:

    每新增一种产品时,就要增加两个类(产品类和它对应的工厂类),当扩展至大量产品种类时,就会产生大量的类,难于管理。


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

// 产品抽象类
class Product {
public:
    virtual void Show() = 0; // 用于验证产品信息
};

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

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

// 工厂抽象类
class Factory {
public:
    virtual Product* CreateProduct() = 0;
};

class DeskFactory: public Factory {
public:
    Product* CreateProduct() {
        return new WoodDesk();
    }
};

class ChairFactory : public Factory {
public:
    Product* CreateProduct() {
        return new WoodChair();
    }
};
主函数中的使用
#include "FactoryMethod.hpp"

int main()
{
    Factory* FactoryDesk = new DeskFactory();
    Product* DeskWood = FactoryDesk->CreateProduct();
    DeskWood->Show();
 
    Factory* FactoryChair = new ChairFactory();
    Product* ChairWood = FactoryChair->CreateProduct();
    ChairWood->Show();
 
    if (NULL != FactoryDesk) {
        delete FactoryDesk;
        FactoryDesk = NULL;
    }
    if (NULL != FactoryChair) {
        delete FactoryChair;
        FactoryChair = NULL;
    }
    return 0;
}
控制台输出结果
WoodDesk
WoodChair

相关文章

  • C++ 常见设计模式

    C++ 常见设计模式包括: 工厂模式 简单工厂模式定义工厂创建类,抽象产品,派生产品类 工厂方法模式 抽象工厂模式...

  • C++设计模式-第二篇 (Boolan)

    C++设计模式-第二篇 (Boolan) 本章内容:1 工厂方法模式2 抽象工厂模式3 原型模式4 构建器模式5 ...

  • 【C++ 设计模式】1-2.工厂方法模式

    工厂方法模式:一种创建型设计模式 应用场景:简单工厂模式[https://www.jianshu.com/p/22...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • PHP-浅谈单例模式和工厂模式

    PHP中常用的设计模式有单例模式、工厂模式(简单工厂模式、工厂方法模式和抽象工厂方法模式)、适配模式、策略模式。 ...

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 设计模式之工厂方法模式(创建型)

    一、模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进...

  • spring 设计模式篇(前)

    设计模式俗称:套路 一、spring常见设计模式 (23种设计模式) 创建型:工厂方法模式、抽象工厂模式、建造者...

  • 设计模式系列-简单工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 定义 简单工厂模式又叫做静态工厂方法模式...

网友评论

    本文标题:【C++ 设计模式】1-2.工厂方法模式

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