在阅读Decorator pattern时,遇到了一些需要澄清的事情。在装饰器模式中,我们只是包装了一个给定的对象,并使用了一系列执行来进行计算。但是为什么我们不能有一个这些对象的列表并迭代每个对象呢?我的意思是,如果没有链,我们不能只使用列表和简单的迭代来遍历每个对象吗?
谢谢
发布于 2012-07-23 10:08:11
我相信你错过了装饰者的重点。
装饰器的目标是透明地添加行为。Java中的InputStream就是一个典型的例子。您可以将类似缓冲的gzip特性链接到输入流。然而,经过修饰的输入流的“用户”不需要知道添加了额外的行为。用户只需将该修饰流用作普通流即可。当然,如果您将每个“行为”作为单独的对象,并将链存储为另一个列表,并显式地单独调用它们,那么它将会起作用。然而它失去了装饰器中的“透明性”。
发布于 2012-07-23 09:01:36
对于列表,您需要一些对象来管理列表以及遍历和应用对象。为了与插件兼容,管理器对象必须是所有对象的基类(通常是抽象的)的子类。它只是比让每个对象知道它包装了什么更不灵活,仅此而已。
发布于 2020-04-21 17:55:58
装饰动作将在对象中执行。对于列表,它位于对象的外部
https://stackoverflow.com/questions/11605286
复制相似问题