C++设计模式 ==> 装饰(者)模式

简介

装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。装饰模式使用对象嵌套的思想,实现对一个对象动态地进行选择性的属性赋予与去除,例如有一篇固定的文本,我们可以给它装饰上“词汇过滤”与“文本加密”两个属性,但同时也要注意装饰顺序:例如文本如果先进行加密操作就没法进行词汇过滤的操作了。
下面演示一个简单的装饰模式的例子:我们的家(House类)可以进行各种装饰(DecorateTool类),例如添置家具(Furniture子类)添置电器(ElectricApp子类)

图示

装饰模式图示

代码实现

/////////////////////////////////
//
// @Author : PeterZheng
// @FileName : DecorateModeHeader.h
// @Date : 2018-08-09 17:23
//
/////////////////////////////////

#pragma once

#ifndef DMINCLUDE 
#define DMINCLUDE

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <tchar.h>

#endif

using namespace std;

class House
{
public:
    House() {}
    ~House() {}
    virtual void Show()
    {
        wcout << _T("的房子") << endl;
    }
};

class DecorateTool :public House
{
public:
    DecorateTool(House *h) :hs(h), House() {}
    virtual void Show()
    {
        hs->Show();
    }
private:
    House * hs;
};

class Furniture : public DecorateTool
{
public:
    Furniture(House *h) :DecorateTool(h) {}
    virtual void Show()
    {
        wcout << _T("摆放了家具的");
        DecorateTool::Show();
    }
};

class ElectricApp : public DecorateTool
{
public:
    ElectricApp(House *h) :DecorateTool(h) {}
    virtual void Show()
    {
        wcout << _T("装有电器的");
        DecorateTool::Show();
    }
};
/////////////////////////////////
//
// @Author : PeterZheng
// @FileName : DMdemo.cpp
// @Date : 2018-08-09 17:23
//
/////////////////////////////////

#include "DecorateModeHeader.h"

using namespace std;

int _tmain(void)
{
    House *myHouse = new House();
    House *fHouse = new Furniture(myHouse);
    House *eapHouse = new ElectricApp(fHouse);
    wcout.imbue(std::locale("chs"));
    eapHouse->Show();
    system("pause");
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,347评论 19 139
  • 【学习难度:★★★☆☆,使用频率:★★★☆☆】直接出处:装饰模式梳理和学习:https://github.com/...
    BruceOuyang阅读 4,037评论 2 2
  • 1 场景问题# 1.1 复杂的奖金计算## 考虑这样一个实际应用:就是如何实现灵活的奖金计算。 奖金计算是相对复杂...
    七寸知架构阅读 9,523评论 4 67
  • 文|零露 秋风秋雨伴秋凉, 花开花谢落花飞。 窗外檐外雨潺潺, 流水落花两茫茫。 北雁南飞盼春归, 西风冷雨话秋凉...
    零露_清扬婉兮阅读 4,062评论 11 20
  • 哥哥的臭脚, 很酸很酸, 像一碗放了很久的老坛酸菜。 哥哥的臭脚, 很咸很咸, 像一条放了十年的咸鱼。 你若想尝一...
    桢桢小丸子阅读 5,059评论 0 1