Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 装饰图案与列表_Java_Design Patterns - Fatal编程技术网

Java 装饰图案与列表

Java 装饰图案与列表,java,design-patterns,Java,Design Patterns,在阅读Decorator模式时,遇到了一些需要澄清的问题。在decorator模式中,我们只是包装一个给定的对象,并使用一系列执行来进行计算。但是为什么我们不能有这些对象的列表并遍历它们呢。我的意思是,如果没有链子,我们就不能用一个列表和简单的迭代来遍历每个对象吗 感谢有了列表,您需要一些对象来管理列表、遍历和应用对象。为了与插件兼容,manager对象必须是所有对象(通常是抽象的)基类的子类。这比让每个物体都知道它在包装什么东西更不灵活。我相信你已经错过了装饰的要点 Decorator旨在透明

在阅读Decorator模式时,遇到了一些需要澄清的问题。在decorator模式中,我们只是包装一个给定的对象,并使用一系列执行来进行计算。但是为什么我们不能有这些对象的列表并遍历它们呢。我的意思是,如果没有链子,我们就不能用一个列表和简单的迭代来遍历每个对象吗


感谢有了列表,您需要一些对象来管理列表、遍历和应用对象。为了与插件兼容,manager对象必须是所有对象(通常是抽象的)基类的子类。这比让每个物体都知道它在包装什么东西更不灵活。

我相信你已经错过了装饰的要点


Decorator旨在透明地添加行为。典型的例子是Java中的InputStream。您可以将缓冲、gzip功能链接到输入流。但是,该修饰输入流的“用户”不需要知道添加了额外的行为。用户只需将该修饰流用作普通流。当然,如果您将每个“行为”作为一个单独的对象,并将链存储为另一个列表,并显式地单独调用它们,那么它将起作用。但是它在decorator中失去了“透明性”。

装饰操作将在对象中执行。对于列表,它位于对象外部