关于装饰设计模式

时间:2013-11-14 21:15:12

标签: design-patterns decorator

其实我有关于装饰设计模式的介绍。我确信我已经在java和c#中使用了几次,这个问题的目的是我没有得到一些真实世界的简单例子,通过这些例子我可以很容易地向我的观众展示这一点。任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

您可以找到已接受的答案here

但是,如果您不理解该链接的答案,这里有一个简单的插图,我想到了现实世界的装饰是如何工作的。正如名称所述,装饰者就像是现实世界中的装饰。

想象一个大球。你想用一些迷彩图案制作一个球,并附上一些图案和贴纸。  应该够简单。

Ball Factory

首先,你会有一个Ball Factory(或创造者),它会产生黑色的球(或透明,无关紧要)。很琐碎。

RedColorBall Factory

您希望球具有红色基色。所以在Ball Factory完成球之后,RedColorBall Factory将把它涂成红色,并将它返回给你。再次,它是微不足道的。

BluePatternBall Factory

几天之后,你认为制作的球需要有蓝色迷彩图案。所以在RedColorBall Factory返回红球后,BluePatternBall Factory将绘制一个蓝色图案并将其返回给你。

GreenStripeBall Factory

几天之后你会认为球需要有绿色条纹和红色基色(这很奇怪,不要问)。但它需要在涂上红色基色后,在涂上蓝色图案之前涂上。因此,您制作GreenStripeBall Factory并在RedColorBall Factory之后和BluePatternBall Factory之前定位。

ChicagoBullsSticker Factory

然后最后你需要一个芝加哥公牛队(随机选择,不要评判我)球的贴纸。然后你制作ChicagoBullsStickerFactory,并将它放在BluePatternBallFactory之后的最后一个。然后你得到red-based with green stripe and blue camo pattern ball with chicago bulls sticker

如果您需要添加一些贴在球上的图案或其他贴纸,您只需要创建另一个工厂并在它们之前/之后或之间放置它。

答案 1 :(得分:0)

I / O Streams是Decorator模式的两种语言的经典示例

答案 2 :(得分:0)

Decorator模式的目的是让你通过“自我包裹”原始对象的类型来动态扩展对象的行为。

在.NET Framework中,此“包装”的常见示例是Stream类及其所有变体,例如BufferedStreamCryptoStream

BufferedStream通过读取和写入大块数据字节来扩展Stream类,以获得比普通Stream更好的性能;而CryptoStream通过动态加密和解密数据字节来扩展Stream类以确保安全性。两者都是流,因为它们可以完成流所能做的所有事情,如读,写,搜索等。

装饰器类通常有一个构造函数,其参数表示它们打算装饰的类型,例如:

new BufferedStream(Stream stream);