zoukankan      html  css  js  c++  java
  • 设计模式-工厂模式

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

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

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

    代码实现:

    #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;
    }
    

      运行结果:

  • 相关阅读:
    Unity 摄像机旋转跟随缩放控制
    Unity 协程深入解析与原理
    好看的滚动条
    ES6编译问题SyntaxError: Unexpected token import
    Axure rp8 注册码,亲测可以用! 可用给个赞呗!!
    angular 项目中遇到rxjs error TS1005:';'
    window 查看端口 杀端口
    angular 中嵌套 iframe 报错
    js 快速生成数组的方法
    ng-packagr 不能全部打包文件
  • 原文地址:https://www.cnblogs.com/xuelisheng/p/9745045.html
Copyright © 2011-2022 走看看