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-13 13:36:54

22装饰模式的相关文章

(四)装饰模式-C++实现

动态地给对象添加一些额外的职责.就功能来说,装饰模式相比派生子类更为灵活. 当需要改进类的某个功能,而不是该类创建的全部对象时,可以使用这种设计模式. 装饰模式中有四种角色; 1.抽象组件:我们需要改进的类的父类,是一个抽象类.定义了一些虚函数. 2.具体组件:也就是它的某些对象可能需要被改进.也叫做被装饰者. 3.装饰:它也是抽象组件的子类,并且还包含一个抽象组件的声明,用来保存被装饰者的引用.它可以是抽象类,也可是是非抽象类. 4.具体装饰:它是装饰的实例. 本例实现的是一个Bird,作为一

c++ 设计模式6 (Decorator 装饰模式)

4. "单一职责"类模式 在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任. 典型模式代表: Decorator,Bridge 4.1 Decorator 装饰模式 代码示例:不同的流操作(文件流,网络流,内存流)及其扩展功能(加密,缓冲)等的实现 实现代码1: 类图结构示意(大量使用继承) 数据规模: 假设有n种文件,m种功能操作.该实现方法有(1 + n + n * m! / 2) 数量级的子

7 结构型模式之 - 装饰模式

装饰模式介绍:装饰模式也称为包装模式,是结构型模式之一,其使用一种对客户端透明的方式来动态地扩展对象的功能,同时它也是继承关系的一种替代方案之一.在现实生活中你也可以看见很多装饰模式的例子,或者可以大胆地说装饰模式无处不在,就拿人来说,人需要各式各样的衣着,不管你穿着怎样,但是,对于个人的本质来说是不变的,充其量只是在外面披上一层包装而已,这就是装饰模式,装饰物也许各不相同但是装饰的对象本质是不变的. 装饰模式的定义:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生成子类更加灵

JAVA设计模式之装饰模式

装饰模式:动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性的替代方案. 例子:你要替一家咖啡店设计beverage类.beverage有很多种,并且可以添加许多的调料,比如蒸奶.豆浆.摩卡等. 1 public abstract class Beverage 2 { 3 String description = "Unknown Beverage"; 4 5 public String getDescription() 6 { 7 return description

24种设计模式--装饰模式【Decorator Pattern】

装饰模式在中国使用的那实在是多,中国的文化是中庸文化,说话或做事情都不能太直接,需要有技巧的,比如说话吧,你要批评一个人,你不能一上来就说你这个做的不对,那个做的不对,你要先肯定他的成绩,表扬一下优点,然后再指出瑕疵,指出错误的地方,最后再来个激励,你修改了这些缺点后有那些好处,比如你能带更多的小兵,当个小头目等等,否则你一上来就是一顿批评,你瞅瞅看,肯定是不服气,顶撞甚至是直接“此处不养爷,自有养爷处”开溜哇.这是说话,那做事情也有很多,在山寨产品流行之前,假货很是比较盛行的,我在 2002

《Java设计模式》之装饰模式

装饰模式(Decorator) 1.    装饰模式(Decorator)的定义:又名包装(Wrapper)模式.装饰模式以对client透明的方式扩展对象的功能,是继承关系的一个替代方案. 2.    装饰模式以对client透明的方式动态的给一个对象附加上很多其它的责任.换言之client并不会觉的对象在装饰前和装饰后有什么差别. 3.    装饰模式能够在不创造很多其它的子类的模式下,将对象的功能加以扩展. 4.    装饰模式与类继承的差别: 1)    装饰模式是一种动态行为,对已经存

swift设计模式学习 - 装饰模式代码大全

装饰模式 在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 装饰模式的特点 装饰对象和真实对象有相同的接口.这样客户端对象就能以和真实对象相同的方式和装饰对象交互. 装饰对象包含一个真实对象的引用(reference) 装饰对象接受所有来自客户端的请求.它把这些请求转发给真实的对象. 装饰对象可以在转发这些请求以前或以后增加一些附加功能.这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能.在面向对象的设计中

简单说说装饰模式

这里只简单说说装饰模式,因为对这个模式理解得还不是很透彻.暂时不能写出更深一点的内容. 什么是装饰模式呢?拟定一个场景,一个人需要穿衣打扮,我们可以写一个Person类,为它定义出N个方法,穿短袖,穿皮鞋,等等.要新增一个装饰的时候,我们在Person类里新增一个方法即可,但这违背了“方法-封闭”原则.如何写出更好更加灵活的代码呢?我们用装饰模式来实现这个场景.小明先穿短袖,后穿皮鞋. 穿短袖.穿皮鞋等等,我们把这些装饰方法干脆抽象出来成一个装饰类,不同的装饰继承实现这个类.人定义为一个接口,小

设计模式4:装饰模式(1)

作用: 基于已经存在的功能提供增强功能. 将扩展的类作为新的类的构造函数参数传入,然后对这个类进行装饰处理. 为了让装饰者有被装饰的功能,需要存在继承关系. 简单的点讲就是为了扩展一个已定义好的类的功能,而不修改原来类的定义,原来的类仍然可以继续使用,现在定义一个新的类继承原来的类,同时在这个新的类中定义父类的成员变量,同时在构造方法中将外界的一个父类对象传给这个成员变量,然后既可以通过这个成员变量使用父类的方法,同时又可以增加新的方法实现对父类功能的扩充.例如IO流中很多类都采用了装饰模式,如