美文网首页
设计模式-创建模式-工厂方法模式

设计模式-创建模式-工厂方法模式

作者: 阿棍儿_Leon | 来源:发表于2020-04-28 15:04 被阅读0次

随着产品种类越来越丰富,简单工厂模式有一个弊端。每次增加产品,都需要对工厂进行修改,这就可能对原有生产线引入问题。为了避免这个问题,可以使用工厂方法问题。在简单工厂模式的基础上,对工厂进行抽象,增加一个抽象工厂类,原来的工厂变为一个派生类,而对于新产品,可以增加新工厂,这个增加新工厂的过程对原有生产线没有影响。

以下代码相对与简单工厂模式的例子增加了产品C。

#include <iostream>

using namespace std;

enum ProductType{
    ProductTypeA,
    ProductTypeB,
    ProductTypeC,
};

class Products
{
public:
    virtual void Display() = 0;
    virtual ~Products(){}
};

class ProductA:public Products
{
public:
    void Display()
    {
        cout<<__PRETTY_FUNCTION__<<endl;
    }
};

class ProductB:public Products
{
public:
    void Display()
    {
        cout<<__PRETTY_FUNCTION__<<endl;
    }
};

class ProductC:public Products
{
public:
    void Display()
    {
        cout<<__PRETTY_FUNCTION__<<endl;
    }
};

以下代码对工厂类进行了调整,以AbstractFactory为接口类,原工厂类和新工厂类作为实现类。工厂FactoryForC对新产品C实现了生产方法。

class AbstractFactory
{
public:
    virtual Products* CreateProduct(ProductType Type)=0;
};

class Factory:public AbstractFactory
{
public:
    Products* CreateProduct(ProductType Type)
    {
        switch (Type) {
        case ProductTypeA:
            return new ProductA();
            break;
        case ProductTypeB:
            return new ProductB();
            break;
        default:
            return nullptr;
            break;
        }
    }
};

class FactoryForC:public AbstractFactory
{
public:
    Products* CreateProduct(ProductType Type)
    {
        switch (Type) {
        case ProductTypeC:
            return new ProductC();
            break;
        default:
            return nullptr;
            break;
        }
    }
};

以下代码相对于简单模式的例子增加了对C类产品的生产过程。

int main(void){

    AbstractFactory* factory = new Factory();
    Products* productA = factory->CreateProduct(ProductTypeA);
    productA->Display();
    Products* productB = factory->CreateProduct(ProductTypeB);
    productB->Display();
    delete factory;
    delete productA;
    delete productB;

    factory = new FactoryForC();
    Products* productC = factory->CreateProduct(ProductTypeC);
    productC->Display();
    delete factory;
    delete productC;

    return 0;
}

输出

virtual void ProductA::Display()
virtual void ProductB::Display()
virtual void ProductC::Display()

相关文章

  • Kotlin(八)kotlin设计模式-创建型

    创建型模式 - 工厂 Kotlin里面几种主流创建型设计模式:工厂方法模式,抽象工厂模式,构建者模式 8.1 伴生...

  • spring 设计模式篇(前)

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

  • 2021-11-16 - 学习记录

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

  • 「每天一个知识点」精讲设计模式面试专题

    前言: 设计模式的分类 设计模式分为三类 创建型设计模式与对象创建有关包括单例模式,工厂方法模式,抽象工厂模式,建...

  • 工厂方法模式

    什么是工厂方法模式 工厂方法模式又称为工厂模式,属于创建型设计模式。工厂方法模式定义了一个创建对象的接口,但由子类...

  • 简单工厂模式

    Android进阶之设计模式 简单工厂模式 简单工厂模式(又叫作静态工厂方法模式), 其属于创建型设计模式,但并不...

  • 设计模式、第一篇

    常用设计模式 设计模式分类 1.创建型 工厂方法模式(Factory Method)、抽象工厂模式(Abstrac...

  • 工厂模式--简单工厂模式

    设计模式 1 工厂模式简介 1.1 定义 简单工厂模式属于创建型模式又叫做静态工厂方法模式,它属于类创建型模式。在...

  • 简单工厂模式

    工厂方法模式(Factory Pattern)是创建型设计模式之一。 一、定义 简单工厂模式又称为静态方法工厂模式...

  • 工厂模式-简单工厂模式、工厂方法模式、抽象工厂模式

    工厂模式 工厂模式是一种比较常见的创建型设计模式,分为简单工厂模式、工厂方法模式、抽象工厂模式 工厂模式旨在把对象...

网友评论

      本文标题:设计模式-创建模式-工厂方法模式

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