美文网首页
C++设计模式 ==> 装饰(者)模式

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

作者: PeterZ1997 | 来源:发表于2018-08-12 18:18 被阅读0次

简介

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

相关文章

  • 设计模式

    设计模式 单例模式、装饰者模式、

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

    简介 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • java IO 的知识总结

    装饰者模式 因为java的IO是基于装饰者模式设计的,所以要了解掌握IO 必须要先清楚什么事装饰者模式(装饰者模式...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • JavaScript 设计模式核⼼原理与应⽤实践 之 结构型设计

    JavaScript 设计模式核⼼原理与应⽤实践 之 结构型设计模式 装饰器模式,又名装饰者模式。它的定义是“在不...

  • 8种设计模式:

    主要介绍 单例设计模式,代理设计模式,观察者设计模式,模板模式(Template), 适配器模式,装饰模式(Dec...

  • 装饰者模式

    JavaScript 设计模式 张容铭第十二章 房子装修--装饰者模式 (102页) 装饰者模式(Decorato...

  • Summary of February 2017

    READING Head First 设计模式:完成50%。内容:观察者模式、装饰者模式、工厂模式、单件模式、命令...

  • 装饰对象:装饰者模式

    装饰对象:装饰者模式   这是《Head First设计模式(中文版)》第三章的读书笔记。   装饰者模式,可以称...

网友评论

      本文标题:C++设计模式 ==> 装饰(者)模式

      本文链接:https://www.haomeiwen.com/subject/hhtebftx.html