关于装饰器设计模式
Posted
技术标签:
【中文标题】关于装饰器设计模式【英文标题】:About Decorator design pattern 【发布时间】:2013-11-28 02:32:01 【问题描述】:实际上我有一个的演示。我确信我已经在 java 和 c# 中使用过它几次,问这个问题的目的是我没有得到一些真实世界的简单示例,我可以通过这些示例轻松地向我的听众介绍这一点。谁能帮帮我?
【问题讨论】:
en.wikipedia.org/wiki/Decorator_pattern ***.com/questions/2707401/…。查看 java.io.FileInputStream 和 java.io.BufferedInputStream 示例。 ***.com/questions/6366385/decorator-pattern-for-io 【参考方案1】:I/O 流是装饰器模式在两种语言中的经典示例
【讨论】:
【参考方案2】:装饰器模式的目的是让您通过“包装”原始对象的类型来动态扩展对象的行为。
在 .NET Framework 中,这种“包装”的常见示例是 Stream
类及其所有变体,例如 BufferedStream
和 CryptoStream
。
BufferedStream
扩展了Stream
类,通过读取和写入大块数据字节以获得比普通Stream
更好的性能;而CryptoStream
通过动态加密和解密数据字节来扩展Stream
类以确保安全。两者仍然是流,因为它们可以执行流可以执行的所有操作,例如读取、写入、查找等。
装饰器类通常有一个带有参数的构造函数,该参数表示它们打算装饰的类型,例如:
new BufferedStream(Stream stream);
【讨论】:
【参考方案3】:您可以找到接受的答案here。
但是,如果您不理解该链接上的答案,这里有一个简单的说明,我想到了现实世界的装饰是如何工作的。顾名思义,装饰器就像现实世界中的装饰品。
想象一个大球。你想制作一个带有一些迷彩图案和一些图案和贴纸的球。 应该很简单。
球厂
首先,您将有一个Ball Factory
(或创建者)产生黑色(或透明,无所谓)的球。微不足道。
红彩球工厂
您希望球的底色为红色。所以在Ball Factory
完成球后,RedColorBall Factory
会将球涂成红色,然后还给你。这又是微不足道的。
BluePatternBall 工厂
几天后,您认为生产的球需要有蓝色迷彩图案。所以RedColorBall Factory
返回红球后,BluePatternBall Factory
会画一个蓝色的图案并返回给你。
GreenStripeBall 工厂
几天后,您认为球需要有绿色条纹和红色底色(这很奇怪,不要问)。但它需要在涂完红色底色之后,在涂蓝色图案之前涂上。所以你创建了GreenStripeBall Factory
并将其定位在RedColorBall Factory
之后和BluePatternBall Factory
之前。
芝加哥公牛贴纸工厂
那么最后你需要一个芝加哥公牛队(随机选择,不要评判我)贴纸。然后你制作ChicagoBullsStickerFactory
,并把它放在BluePatternBallFactory
之后的最后。然后你会得到red-based with green stripe and blue camo pattern ball with chicago bulls sticker
。
以后如果你需要在球上添加一些图案或其他贴纸,你只需要创建另一个工厂并将它放在它们之前/之后或它们之间。
【讨论】:
以上是关于关于装饰器设计模式的主要内容,如果未能解决你的问题,请参考以下文章