22装饰模式



1装饰模式的核心内容是:

A:通过中间这向多方发送消息

2装饰模式的作用:。

3装饰模式具体描述

装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,

是继承关系的一个替代方案,提供比继承更多的灵活性。

动态给一个对象增加功能,这些功能可以再动态的撤消。

增加由一些基本功能的排列组合而产生的非常大量的功能。

 

Mary过完轮到Sarly过生日,还是不要叫她自己挑了,

不然这个月伙食费肯定玩完,拿出我去年在华山顶上照的照片,

在背面写上“最好的的礼物,就是爱你的Fita”,

再到街上礼品店买了个像框(卖礼品的MM也很漂亮哦),

再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装起来……,

我们都是Decorator,最终都在修饰我这个人呀,怎么样,看懂了吗?

4装饰模式类图

5.代码:

#include<string>

#include<iostream>

usingnamespacestd;

 

//装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,

//是继承关系的一个替代方案,提供比继承更多的灵活性。

//动态给一个对象增加功能,这些功能可以再动态的撤消。

//增加由一些基本功能的排列组合而产生的非常大量的功能。

//

//Mary过完轮到Sarly过生日,还是不要叫她自己挑了,

//不然这个月伙食费肯定玩完,拿出我去年在华山顶上照的照片,

//在背面写上“最好的的礼物,就是爱你的Fita”,

//再到街上礼品店买了个像框(卖礼品的MM也很漂亮哦),

//再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装起来……,

//我们都是Decorator,最终都在修饰我这个人呀,怎么样,看懂了吗?

classPerson

{

private:

   stringm_strName;

public:

   Person(stringstrName)

   {

       m_strName
=strName;

   }

   Person(){}

   virtualvoidshow()

   {

       cout
<<"装扮的是:"
<< m_strName <<endl;

   }

};

 

classFinery
:publicPerson

{

protected:

   Person
*m_component;

public:

   voiddecorate(Person*component)

   {

       m_component
=component;

   }

   virtualvoidshow()

   {

       m_component->show();

   }

};

 

classTShirts
:publicFinery

{

public:

   virtualvoidshow()

   {

       m_component->show();

       cout
<<"T shirts" <<endl;

   }

};

 

classBigTrouser
:publicFinery

{

public:

   virtualvoidshow()

   {

       m_component->show();

       cout
<<"BigTrouser"<<endl;

   }

};

 

intmain()

{

   Person
*p =
newPerson("小李");

   BigTrouser
*bt =
newBigTrouser();

   TShirts
*ts =
newTShirts();

 

   bt->decorate(p);

   ts->decorate(bt);

   ts->show();

   cin.get();

   return
0;

}

运行结果如下:

时间: 2024-10-23 19:41:11

22装饰模式的相关文章

结构型模式--装饰模式

下面先用java,然后用Objective-C行对装饰模式的讲解: 对于java的装饰模式讲解和使用比较详细和难度有点偏高,而对于Objective-C的装饰模式讲解和使用方面比较简单,而且和java的装饰模式略有差异,差异在于:java的装饰模式是通过面向抽象来编程的,而Objective-C就没有用到抽象或则协议这个应用,而是直接用对象引用被装饰类来扩展对象的方法.我个人觉得这主要原因应该是java语言的实用场景往往是结构复杂的大项目,涉及的问题领域比较广,而Objective-C应用领域仅

第8章 装饰模式(Decorator Pattern)

原文 第8章 装饰模式(Decorator Pattern) 概述:         装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 装饰模式的特点:   (1) 装饰对象和真实对象有相同的接口.这样客户端对象就可以和真实对象相同的方式和装饰对象交互. (2) 装饰对象包含一个真实对象的引用(reference) (3) 装饰对象接受所有来自客户端的请求.它把这些请求转发给真实的对象. (4) 装饰对象可以在转发这

【设计模式】—— 装饰模式Decorator

模式意图 在不改变原来类的情况下,进行扩展. 动态的给对象增加一个业务功能,就功能来说,比生成子类更方便. 应用场景 1 在不生成子类的情况下,为对象动态的添加某些操作. 2 处理一些可以撤销的职责. 3 当不能使用生成子类来扩充时. 模式结构 Component 外部接口,用于定义外部调用的形式.提供默认的处理方法. interface Component{ public void operation(); }   ConcreteComponent  具体的处理类,用于实现operation

centos ssh登录-CentOS 6.2 ping得的通/telnet 22也通,却无法ssh登陆上!

问题描述 CentOS 6.2 ping得的通/telnet 22也通,却无法ssh登陆上! 如题.外部机器ping该机器无问题,telnet 22端口也木有问题.却无法连接上?!试了putty和secure shell都不行那?! 希望给出解决思路:什么配置需要注意? 解决方案 你要配置该服务器的ssh服务 然后在该服务器上开启ssh服务

装饰模式

[装饰模式]:   动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活.   Component是定义一个对象接口,可以给这些对象动态的添加职责. ConcreteComponent是定义一个具体的对象,也可以给这个对象添加一些职责. Decorator装饰抽象类,继承了Component类,从外类来扩展Component类的功能,但对于Component来说,是无需知道Decorator类的存在的.至于ConcreteDecorator 就是具体的装饰对象,起到给C

8·22百度算法调整之我见

近日发现部分网站baidu快照更新有回档现象,略感百度排名算法会有所调整,刚刚从百度公告<08-22百度算法升级,将影响作弊站点收录及低质站点的排序>中获悉百度确实对其算法再次升级,并且明确此次升级打击的主要为胡乱采集.超链作弊等影响用户体验的网站.在公告末尾讲明此次算法的升级将提升4-5%的关键词搜索体验,同时仍不可避免会有个别误伤情况,并再次强调针对作弊行为的算法升级将继续进行下去. 细读此次百度算法更新公告中的举例,提出个人见解如下: 第一.乱采集内容,语句不通,读者无法从中获得需要的信

今天 4月22日

 今天 4月22日  问题 1          每次启动需要运行 /usr/bin/dt/dtlogin &         什么原因?为什么以前不需要运行就可以抓出Solaris图像?             华为工程师处理方法:                                         请在系统的空闲时间(既管理时间),以root 用户收集一下机器系统的explorer信息,收集方式如下:       #cd /opt/SUNWexplo/bin     #./exp

CSS技巧汇总:网页制作常用的22个CSS技巧

文章简介:22个必须知道的css技巧. 1.改变选中文字的背景和颜色 <PRE style="LINE-HEIGHT: 24px; WIDOWS: 2; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); FONT-VARIANT: normal; FONT-STYLE: normal; TEXT-INDENT: 0px; MARGIN: 0px 0px 10px; ORPHANS: 2; LETTER-SPACING: no

Photoshop发展的22年:没有一款产品能替代它

从 Adobe Photoshop 发布到现在已经22年了,成为设计师生命的一部分.在刚开始要发布这个产品的时候,有很大争论.有些人认为这个产品允许人们修改原始图片,可能会引发很多 问题.不管怎样,随着时间的推移,人们看到了 Photoshop 好的方面越来越大.这篇文章简要介绍了 Photoshop 22年的旅程. 起源 这原本是 Thomas 的一个小项目.他写了一个程序来把一些照片转换成灰色调的.这个简单的功能让 Thomas 产生了兴趣开发更多类似的功能,很快就有了足够多的特效.John