设计模式之《简单的工厂模式和工厂模式》

工厂模式和简单工厂模式比较:

UML图:

简单的工厂模式 图示:

此时,如果我想增加一种水果,石榴,那么我的水果种植基地就需要扩展一块石榴园的种植土地。那么就不符合设计原则中的开闭原则,因此它不属于23种设计模式。

扩展图示:

 

 工厂模式图示 

 此时,如果想增加一种水果,那么不需要改变原来的水果基地,直接再开辟一块地来种植新的水果,如下图:

 简单工厂模式的简单代码:simple_factory.h

#ifndef SIMPLE_FACTORY_H
#define SIMPLE_FACTORY_H

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


class Fruit {
public:
    virtual void fruitName() = 0;
};

class Banana : public Fruit {
public:
    void fruitName() {
        cout << "I'm Banana" <<endl;
    }
};

class Apple : public Fruit {
public:
    void fruitName() {
        cout << "I'm Apple" <<endl;
    }
};

class Pineapple : public Fruit {
public:
    void fruitName() {
        cout << "I'm Pineapple" <<endl;
    }
};

class Watermelon : public Fruit {
public:
    void fruitName() {
        cout << "I'm Watermelon" <<endl;
    }
};

class Peach  : public Fruit {
public:
    void fruitName() {
        cout << "I'm Peach" <<endl;
    }
};


class Factory {
public:
    Fruit * createProduct(const char *chType) {

        if(strcmp(chType , "Banana") == 0)
        {
            return new Banana;
        }
        else if (strcmp(chType , "Apple") == 0)
        {
            return  new Apple;
        }
        else if (strcmp(chType , "Pineapple") == 0)
        {
            return new Pineapple;
        }
        else if (strcmp(chType , "Watermelon") == 0)
        {
            return new Watermelon;
        }
        else if (strcmp(chType , "Peach") == 0)
        {
            return new Peach;
        }
        else
        {
            return nullptr;
        }
    }
};

#endif // SIMPLE_FACTORY_H

工厂模式代码:factory_mode.h

#ifndef FACTORY_MODE_H
#define FACTORY_MODE_H
#include <iostream>
#include <string.h>
using namespace std;



class Fruit {
public:
    virtual void fruitName() = 0;
};

class Banana : public Fruit {
public:
    void fruitName() {
        cout << "I'm Banana" <<endl;
    }
};

class Apple : public Fruit {
public:
    void fruitName() {
        cout << "I'm Apple" <<endl;
    }
};

class Pineapple : public Fruit {
public:
    void fruitName() {
        cout << "I'm Pineapple" <<endl;
    }
};

class Watermelon : public Fruit {
public:
    void fruitName() {
        cout << "I'm Watermelon" <<endl;
    }
};

class Peach  : public Fruit {
public:
    void fruitName() {
        cout << "I'm Peach" <<endl;
    }
};



class Factory {
public:
    virtual Fruit * createProduct() =0 ;
};

class BananaFactor : public Factory {
public:
    Fruit * createProduct() {
        return new Banana;
    }
};

class AppleFactor : public Factory {
public:
    Fruit * createProduct() {
        return new Apple;
    }
};

class PineappleFactor : public Factory {
public:
    Fruit * createProduct() {
        return new Pineapple;
    }
};

class WatermelonFactor : public Factory {
public:
    Fruit * createProduct() {
        return new Watermelon;
    }
};

class PeachFactor : public Factory {
public:
    Fruit * createProduct() {
        return new Peach;
    }
};


#endif // FACTORY_MODE_H

统一调用代码:main.cpp


#define FACTORY_MODE

#ifdef SIMPLE_FACTORY
#include "simple_factory.h"
#endif

#ifdef FACTORY_MODE
#include "factory_mode.h"
#endif

int main(int argc, char *argv[])
{
#ifdef SIMPLE_FACTORY
    Factory *fa = new Factory;
    Fruit *fr = nullptr;

    //生产香蕉
    fr = fa->createProduct("Banana");
    fr->fruitName();
    delete  fr;
    fr = nullptr;

    //生产苹果
    fr = fa->createProduct("Apple");
    fr->fruitName();

    delete  fr;
    fr = nullptr;

    //生产西瓜
    fr = fa->createProduct("Watermelon");
    fr->fruitName();
    delete  fr;
    fr = nullptr;
#endif

#ifdef FACTORY_MODE
    Factory *fa = nullptr;
    Fruit *fr = nullptr;

    //生产桃子
    fa = new PeachFactor;
    fr = fa->createProduct();
    fr->fruitName();

    delete fa;
    fa = nullptr;
    delete fr;
    fr = nullptr;

    //生产菠萝
    fa = new PineappleFactor;
    fr = fa->createProduct();
    fr->fruitName();

    delete fa;
    fa = nullptr;
    delete fr;
    fr = nullptr;

#endif

    return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liu-Eleven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值