设计模式系列(10)工厂模式

1.概念

  工厂方法模式同样属于类的创建型模式,又被称为多态工厂模式。工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。

  核心工厂类不再负责产品的创建,这样核心类称为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象话的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。


2.类图角色职责

1)抽象工厂(Creator)角色

    工厂方法模式的核心,任何工厂类都必须实现这个接口。

2)具体工厂(Concrete Create)角色

    具体工厂类是抽象工厂的一个实现,负责实例化一个产品对象。

3)抽象(Product)角色

    工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

4)具体产品(Concrete)角色

    工厂方法模式所创建的具体实例对象。

                                    

                                                                            工厂模式UML类图

3.示例代码,工厂生产水果:

factory.h

#ifndef FACTORY_H
#define FACTORY_H

#include <iostream>

using namespace std;

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

class Banana : public Fruit
{
public:
    void sayname()
    {
        cout << "banana" << endl;
    }
};

class Apple : public Fruit
{
public:
    void sayname()
    {
        cout << "Apple" << endl;
    }
};

class AbFactory
{
public:
    virtual Fruit* CreateProduct() = 0;
};

class BananaFactory : public AbFactory
{
     virtual Fruit* CreateProduct()
    {
        return new Banana;
    }
};

class AppleFactory : public AbFactory
{
     virtual Fruit* CreateProduct()
    {
        return new Apple;
    }
};


//添加新的水果梨
class Pear : public Fruit
{
public:
    virtual void sayname()
    {
        cout << "Pear" << endl;
    }
};

class PearFactory : public AbFactory
{
public:
    virtual Fruit* CreateProduct()
    {
        return new Pear;
    }
};

#endif // FACTORY_H

main.cpp

int main()
{
    AbFactory  *factory;
    Fruit      *fruit;

    factory = new BananaFactory;
    fruit = factory->CreateProduct();
    fruit->sayname();

    factory = new AppleFactory;
    fruit = factory->CreateProduct();
    fruit->sayname();

    //新添加的水果
    factory = new PearFactory;
    fruit = factory->CreateProduct();
    fruit->sayname();

    delete fruit;
    delete factory;



    return 0;
}


  工厂模式解决了简单工厂模式添加新的产品,需要修改工厂类的问题。当工厂模式添加新的产品时,只需要添加新的产品类和对应产品的工厂即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

洪流之源

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

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

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

打赏作者

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

抵扣说明:

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

余额充值