设计模式-工厂模式

Posted xuelisheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-工厂模式相关的知识,希望对你有一定的参考价值。

工厂模式基本与简单工厂模式差不多,在简单工厂中,每次添加一个产品子类都必须在工厂类中添加一个判断分支,这样违背了开放-封闭原则,因此,工厂模式就是为了解决这个问题而产生的。

既然每次都要判断,那我就把这些判断都生成一个工厂子类,这样,每次添加产品子类的时候,只需再添加一个工厂子类就可以了。这样就完美的遵循了开放-封闭原则。但这其实也有问题,如果产品数量足够多,要维护的量就会增加,好在一般工厂子类只用来生成产品类,只要产品子类的名称不发生变化,那么基本工厂子类就不需要修改,每次只需要修改产品子类就可以了。

同样工厂模式一般应该于程序中大部分地方都只使用其中一种产品,工厂类也不用频繁创建产品类的情况。这样修改的时候只需要修改有限的几个地方即可。

技术分享图片

 

代码实现:

#include <iostream>
#include <string>
using namespace std;

class Fruit{
public:
    virtual void sayName(){
        cout<<"Fruit"<<endl;
    }
};

class Banana: public Fruit{
public:
    virtual void sayName(){
        cout<<"我是香蕉!"<<endl;
    }
};

class Pear: public Fruit{
public:
    virtual void sayName(){
        cout<<"我是梨子!"<<endl;
    }
};

class FruitFactory{
public:
    virtual Fruit *getFruit(){
        cout<<"FruitFactory::getFruit"<<endl;
        return nullptr;
    }
};

class BananaFactory: public FruitFactory{
public:
    virtual Fruit *getFruit(){
        return new Banana;
    }
};

class PearFactory: public FruitFactory{
public:
    virtual Fruit *getFruit(){
        return new Pear;
    }
};

int main(){
    FruitFactory *ff = nullptr;
    Fruit *fruit = nullptr;
    
    // 香蕉
    ff = new BananaFactory;
    fruit = ff->getFruit();
    fruit->sayName();
    delete fruit;
    delete ff;
    
    // 梨子
    ff = new PearFactory;
    fruit = ff->getFruit();
    fruit->sayName();
    delete fruit;
    delete ff;
    return 0;
}

  运行结果:
技术分享图片

 


以上是关于设计模式-工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式简单工厂模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式工厂方法模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式-简单工厂工厂方法模式抽象工厂模式详解

设计模式---工厂模式