我在维基百科中已经读到Decorator模式用于.Net和Java IO类。
有人可以解释如何使用吗?举一个可能的例子,它的好处是什么?
维基百科上有一个Windows表单示例,但我想知道Java IO类如何发生这种情况。
InputStream
是一个抽象类。最具体的实现比如BufferedInputStream
,GzipInputStream
,ObjectInputStream
等有一个构造函数中的一个实例相同的抽象类。这是装饰器模式的识别键(这也适用于采用相同接口实例的构造函数)。
使用此类构造函数时,所有方法都将委派给包装的实例,并改变方法的行为方式。例如,预先在内存中缓冲流,预先对流进行解压缩或对流进行不同的解释。有些甚至具有其他方法,这些方法最终也进一步委托给包装的实例。这些方法用额外的行为来修饰包装的实例。
假设我们在Gzipped文件中有一堆序列化的Java对象,并且我们想快速读取它们。
首先打开它的输入流:
FileInputStream fis = new FileInputStream("/objects.gz");
我们需要速度,因此让我们将其缓冲在内存中:
BufferedInputStream bis = new BufferedInputStream(fis);
该文件已压缩,因此我们需要将其解压缩:
GzipInputStream gis = new GzipInputStream(bis);
我们需要反序列化那些Java对象:
ObjectInputStream ois = new ObjectInputStream(gis);
现在我们终于可以使用它了:
SomeObject someObject = (SomeObject) ois.readObject();
// ...
好处是你可以自由使用一个或多个各种装饰器来装饰流,以满足你的需求。这比具有每一个可能的组合就像一个类好得多ObjectGzipBufferedFileInputStream,ObjectBufferedFileInputStream,GzipBufferedFileInputStream,ObjectGzipFileInputStream,ObjectFileInputStream,GzipFileInputStream,BufferedFileInputStream
,等。
请注意,当你要关闭流时,仅关闭最外面的装饰器就足够了。它将把关闭调用一直委托给底部。
ois.close();
当我回顾了“decorator”设计模式的大量示例时,我刚刚想到了一些示例,这些示例主要是关于更改总是返回字符串的方法,或者像cost()这样聚合数字的方法。 这真的是装饰器设计模式的唯一用法吗? 我只知道它用于Java IO API。 但我想有其他的东西,打印一个文本。一些真实的东西。我找了那么多,却找不到合适的样品。
问题内容: 我正在学习GoF Java设计模式,我想看看其中的一些实际示例。Java核心库中的这些设计模式有哪些好的示例? 问题答案: 你可以在Wikipedia中找到许多设计模式的概述。它还提到了GoF提到了哪些模式。我将在这里对其进行总结,并尝试分配尽可能多的模式实现,这些模式实现可在Java SE和Java EE API中找到。 创作模式 抽象工厂 (通过返回工厂本身的创建方法可识别,该工厂
本文向大家介绍PHP简单装饰器模式实现与用法示例,包括了PHP简单装饰器模式实现与用法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP简单装饰器模式实现与用法。分享给大家供大家参考,具体如下: 更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《p
主要内容:介绍,实现,Shape.java,Rectangle.java,Circle.java,ShapeDecorator.java,RedShapeDecorator.java,DecoratorPatternDemo.java装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 我
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。 介绍 意图:动态地给一个对象添加
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。 介绍 意图:动态地给一个对象添加