设计模式之简单工厂

本文介绍了简单工厂模式,这是一种对象创建型模式,用于根据传入参数动态创建产品类实例。文中通过水果类比,展示了如何创建抽象产品(水果基类)和具体产品(苹果、香蕉、桃子),并利用工厂类进行实例化。此外,还提供了客户端使用示例,演示了如何通过工厂方法创建不同类型的水果对象。
摘要由CSDN通过智能技术生成

概述

简单工厂模式属于对象创建型模式是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的实例。它是工厂模式家族中最简单实用的模式。

关键点

工厂:整个模式的核心,负责实现创建所有实例的内部逻辑

抽象产品:所有具体产品的父类,负责描述所有实例所共有的公共接口

具体产品:最终创建的实例

应用

使用场景包括:工厂类负责创建的对象比较少(不会造成工厂方法中的业务逻辑太过复杂);客户端仅需知道传入工厂类的参数,对于如何创建对象不关心

创建产品类文件

#ifndef PRODUCT_H
#define PRODUCT_H


//水果产品基类
class Fruits
{
public:
    virtual QString name()=0;
};

//具体水果产品
class Apple : public Fruits
{
public:
    virtual QString name()
    {
        return "This is Apple";
    }
};

class Banana : public Fruits
{
public:
    virtual QString name()
    {
        return "this is Banana";
    }
};

class Peach : public Fruits
{
public:
    virtual QString name()
    {
        return "this is Peach";
    }
};
#endif // PRODUCT_H

创建工厂类文件

#ifndef FACTORY_H
#define FACTORY_H

#include "product.h"

class Factory
{
public:
    //产品类型
    enum FRUITS_TYPE
    {
        APPLE_FRUITS ,
        BANANA_FRUITS,
        PEACH_FRUITS
    };

    Fruits * CreatePruduct(FRUITS_TYPE type)
    {
        Fruits *pFruits=nullptr;

        switch (type) {
        case APPLE_FRUITS:
            pFruits=new Apple();
            break;
        case BANANA_FRUITS:
            pFruits=new Banana();
            break;
        case PEACH_FRUITS:
            pFruits=new Peach();
            break;
        default:
            break;
        }

        return pFruits;
    }
};

#endif // FACTORY_H

客户端使用:

#include <QCoreApplication>
#include <QDebug>
#include "factory.h"

#ifndef POINT_DELETE
#define POINT_DELETE(p) {if(p){delete(p);(p)=nullptr;}}
#endif

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    //创建工厂
    Factory *pFactory=new Factory();

    //生产产品
    Fruits *pFruits=pFactory->CreatePruduct(Factory::APPLE_FRUITS);
    qDebug() << pFruits->name() << endl;
    POINT_DELETE(pFruits);

    pFruits=pFactory->CreatePruduct(Factory::BANANA_FRUITS);
    qDebug() << pFruits->name() << endl;
    POINT_DELETE(pFruits);

    pFruits=pFactory->CreatePruduct(Factory::PEACH_FRUITS);
    qDebug() << pFruits->name() << endl;
    POINT_DELETE(pFruits);

    return a.exec();
}

最终控制台输出结果:

 运行环境为Qt的控制台输出

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值