C++实现工厂模式

1 说在前面的话
  工厂模式可能和单例模式应该是设计模式中最简单的两种模式了,所以在前面介绍完单例模式后,我们再来重点学习一下工厂模式。
  工厂模式属于创建型模式,可以分为三类:简单工厂模式、工厂方法模式、抽象工厂模式。它们的区别主要在建立工厂的复杂程度以及产品的复杂程度上。
2 三种模式区别
 2.1 简单工厂模式
  一个抽象产品类,可以派生出多个具体产品类;
  一个工厂类,工厂类可以创建多个具体产品类的实例。
 2.2 工厂方法模式
  一个抽象产品类,可以派生出多个具体产品类;
  一个抽象工厂类,可以派生出多个具体工厂类;
  每个具体工厂类只能创建一个具体产品类的实例。
 2.3 抽象工厂模式
  多个抽象产品类,每个抽象产品类可以派生出多个具体产品类;
  一个抽象工厂类,可以派生出多个具体工厂类;
  每个具体工厂类可以创建多个具体产品类的实例。
 区别:
  Ⅰ 简单工厂和模式工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
  Ⅱ 简单工厂模式只有一个工程类,对应多个产品;而工厂方法模式的具体工厂类只能创建一个具体产品类的实例,但有多个工厂;而抽象工厂模式可以创建多个工厂,同时一个工程可以创建多个产品类。
3 简单工厂模式
  简单工厂就是一个工厂就管理创建多个产品,你想要什么产品给这个工厂发对应消息,它就给你生成对应的产品。我们看下面的程序,下面程序构建了一个商品抽象类,然后对应多个具体商品类,然后创建了一个工厂用来实例化需求的商品。

#include<iostream>
using namespace std;

enum SINGNAL { APPLE, ORANGE, BANANA };

/*一个抽象产品类*/
class Goods
{
public:
    virtual void show() = 0;
};

/*继承自抽象产品类的第一个具体商品类*/
class Apple :public Goods
{
public:
    void show()
    {
        cout << "This is apple" << endl;
    }
};
/*继承自抽象产品类的第二个具体商品类*/
class Orange :public Goods
{
public:
    void show()
    {
        cout << "This is orange" << endl;
    }
};
/*继承自抽象产品类的第三个具体商品类*/
class Banana :public Goods
{
public:
    void show()
    {
        cout << "This is banana" << endl;
    }
};
/*工厂类,用来创建对应商品*/
class Factory
{
public:
    Goods* SwitchGoods(enum SINGNAL& choose)
    {
        if (choose == APPLE)
        {
            return new Apple();
        }
        else if (choose == ORANGE)
        {
            return new Orange();
        }
        else if (choose == BANANA)
        {
            return new Banana();
        }
    }
};


int main()
{
    // 创建哪种商品的指示
    enum SINGNAL singnal = APPLE;
    // 实例化一个工厂
    Factory factory;
    // 委托工厂生产某一件产品
    Goods* goods = factory.SwitchGoods(singnal);
    goods->show();  // 输出结果是:This is apple
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值