其实我有关于装饰设计模式的介绍。我确信我已经在java和c#中使用了几次,这个问题的目的是我没有得到一些真实世界的简单例子,通过这些例子我可以很容易地向我的观众展示这一点。任何人都可以帮助我吗?
答案 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
类及其所有变体,例如BufferedStream
和CryptoStream
。
BufferedStream
通过读取和写入大块数据字节来扩展Stream
类,以获得比普通Stream
更好的性能;而CryptoStream
通过动态加密和解密数据字节来扩展Stream
类以确保安全性。两者都是流,因为它们可以完成流所能做的所有事情,如读,写,搜索等。
装饰器类通常有一个构造函数,其参数表示它们打算装饰的类型,例如:
new BufferedStream(Stream stream);