从零开始最简单Qt/C++设计模式总结二:装饰者模式

9 篇文章 2 订阅

代码

基于Qt5.9+mingw32

#include <QCoreApplication>
#include <QList>
#include <QDebug>
//装饰者模式的例子--20180910
///装饰者模式的基本用途是用于任意组合对象,就像三明治的制作过程一样
//装饰者模式的原理跟观察者也一样是面向对象的运行时类型识别特性,将每个组件类都留下接口给其它组件
//在真正构造时就能用该接口进行组装,典型的装饰者模式的用途就是字符流的函数(如oparator(<<))

//首先构造一个组件接口,包含纯虚函数用以实现这一组件的待组装功能
class Thing
{
protected:
    Thing() {}
public:
    virtual ~Thing() {}
    virtual void make() = 0;//所有派生组件类的待拼装功能
};

//组件类1
class Coffee: public Thing
{
private:
    Thing *food;//留给其它组件的接口
public:
    Coffee(): Thing() {}
    Coffee(Thing* food)//这个构造函数可以添加其它组件在本组件上
    {
        this->food = food;
    }
protected:
    virtual void make()//本组件功能要加上其它连接在这个组件上的功能
    {
        qDebug() << "coffee ";
        food->make();
    }
};
//组件类2-同1
class Sugar: public Thing
{
private:
    Thing *food;
public:
    Sugar(): Thing() {}
    Sugar(Thing* food)
    {
        this->food = food;
    }
protected:
    virtual void make()
    {
        qDebug() << "sugar  ";
        food->make();
    }
};

int main(int, char **)
{
    ///装饰者模式测试
    Thing *thing = new Coffee(new Sugar(new Sugar(new Sugar(new Sugar(new Sugar(new Coffee(new Coffee(new Coffee()))))))));
    thing->make();//用带组件接口的构造函数来组合一系列组件,然后调用这个组合后的大组件的功能函数
    qDebug() << "\r\n";

    getchar();
    delete thing;
}

结果

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值