decorator的结构如下:
MyInterface
|
_______|_______
| |
Myclass Decorator
____|_____
| |
DecoratorA DecoratorB
decorator的目的是在不改变基础类的前提下,添加新的功能(在比较少的子类前提),Myclass是你的扩展类,decoratorA,decoratorB封装了你要扩展的功能,并保持了 MyInterface的引用
考虑一下代码
public static void main(String[]args){
MyInterface a=new Myclass();
a.print();
}
MyInterface是Myclass的接口,在 MyInterface里面就声明了一个print方法,myclass实现了该方法
public void print(){
System.out.print("hello");
}
如果我们要实现打印 ”hello word“,”my hell“就要要写很多类似的类,
decorator装饰模式的解决方法就是,只实现基本功能,附加功能都抽出来,
public decoratorA implements Decorator{
MyInterface myObject;
public decoratorA(MyInterface my){
myObject=my;
}
public void print(){
System.out.print(" world ");
}
}
public decoratorB implements Decorator{
MyInterface myObject;
public decoratorB(MyInterface my){
myObject=my;
}
public void print(){
System.out.print("MY ");
myObject.print();
}
}
这时需要实现my hello word就比较简单了
public void main(String[]args){
MyInterface a=new decoratorA (new decoratorB(new Myclass()) );
a.print();
}
BufferedInputStream bis = new BufferedInputStream(new DataInpuStream(new FileInputStream("xxx.txt")));
InputStream.为例:
java.io.InputStream
|
_______________________|________________________
| |
ByteArrayInputStream FilterInputStream
StringBufferInputStream _____________________|____________________________
FileInputStream | | | |
PipedInputStream DataInputStream BufferedInputStream LineNumInpuStream PushbackInputStream
基础的流只有左边4个,这些流代表了数据的来源,所有的流都必须从这四个中之一开始(注,还有一个RandomAccessFile、File,这两个不在本文介绍范围)。
当我们需要什么新功能的时候就在右边找个装饰类,在用到缓存的时候我们就用bufferedInputStream
BufferdInputStream is = new BufferedInputStream(new FileInputStream("xxx.txt"));
假如再要DataInputStream的功能,只要在加一层:
DataInputStream dis = new DataInputStream(new BufferdInputStream(new FileInputStream));
分享到:
相关推荐
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它允许在运行时给对象添加新的行为或职责,而无需改变对象的类。在Java中,装饰模式通常通过继承和组合来实现,使得代码具有更好的扩展性和灵活性。...
在Java中,装饰模式的一个经典例子是`java.io`包中的流类。例如,`FileInputStream`是具体组件,`BufferedInputStream`和`DataInputStream`则是具体装饰者,它们分别增加了缓冲和数据转换的功能,但保持了对原始输入...
在阅读Java IO源码时,可以看到这些Decorator类都遵循了相同的模式:定义一个与被装饰类相同接口的类,持有被装饰对象的实例,并在其方法中调用被装饰对象的方法,同时添加额外的功能。例如,BufferedInputStream在...
在阅读这篇博客和解压后的“decorator”文件后,你可以深入理解装饰者模式的实现细节,学习如何在自己的项目中运用这一模式,以更优雅的方式扩展功能,同时避免过度使用继承导致的类爆炸问题。通过实践和理解装饰者...
Java的IO库是一个复杂而强大的系统,其设计思想和实现方式体现了多种设计模式,包括Decorator(装饰者)模式和Adapter(适配器)模式。本文将深入探讨这两个模式在Java/IO中的应用,并通过实例解释它们如何使得Java...
总的来说,Java IO包是一个强大的工具集,通过Decorator模式实现了灵活的流处理。理解这个模式对于深入掌握Java IO非常重要,它不仅帮助我们更好地理解和使用Java提供的IO类,还可以启发我们在其他领域中应用类似的...
Java的IO体系结构是其强大的特性之一,但同时也因为种类繁多的Stream类而显得复杂。...本文作者对Java的IO体系和Decorator模式有着深入的理解,通过分析源码和实际示例,帮助读者更好地掌握这两个主题。
Java的IO体系结构是编程语言Java中的一个重要组成...理解Decorator模式及其在Java IO中的应用,对于深入掌握Java IO体系至关重要。通过这种方式,开发者可以更高效地管理输入输出操作,提高代码的可维护性和可扩展性。
System.IO命名空间下的许多类,如MemoryStream、FileStream和GZipStream,都是装饰模式的实例。例如,GZipStream可以看作是Stream的装饰器,它在原有Stream的基础上增加了压缩功能,但对外仍表现为Stream对象。 ...
装饰模式的核心在于组件(Component)、抽象装饰(Decorator)和具体装饰(Concrete Decorator)三个角色。组件是被装饰的对象,它定义了一组通用操作的接口。抽象装饰类是组件接口的一个实现,它持有对组件对象的...
- **ConcreteComponent(具体组件)**:实现了Component接口的类,是装饰模式要装饰的目标对象。它定义了初始行为,不包含任何额外装饰。 - **Decorator(装饰者)**:持有对Component对象的引用,并且实现...
5. 在Java开发中,装饰器模式的一个常见应用是IO流的处理,例如BufferedInputStream和PrintStream等,它们都是对原生的InputStream和OutputStream进行了装饰,增加了缓冲和格式化输出等功能。 通过学习这个案例和...
装饰模式(Decorator Pattern)是Java设计模式中的一种结构型模式,它允许在运行时动态地向对象添加新的行为或职责,而不会破坏封装性。这种模式可以用来将多个功能组合在一起,同时保持类的可扩展性和灵活性。在...
在实际应用中,装饰模式常用于处理与I/O流相关的操作,例如Java的`java.io`包中的各种流类。例如,BufferedInputStream是一个装饰者,它包装了一个InputStream实例,提供了缓冲功能;FilterOutputStream是另一个装饰...
例如,`java.io`包下的各种流类,如`BufferedInputStream`、`DataOutputStream`等,它们都作为基础流(如`FileInputStream`、`FileOutputStream`)的装饰者,通过组合的方式为基本的I/O操作增加了缓冲、格式转换等...
例如,可以分析Java的IO流体系,其中的InputStream、OutputStream等类就大量使用了装饰者模式,使得不同的流功能(如缓冲、加密、字符编码转换等)可以通过组合不同的装饰类来实现。 至于“工具”,装饰者模式也常...
1. 装饰器模式(Decorator):Java IO系统中广泛使用该模式,通过装饰器模式来扩展IO流的功能。 五、举例说明: 1. Java IO的类和接口:通过查看Java IO包下的类和接口,可以了解到Java在IO上的丰富支持,包括各种...
Java的IO模型采用了装饰者模式(Decorator Pattern),这使得开发者可以根据具体需求动态地组合不同的流类来构建所需的IO功能。例如,如果需要一个具有缓冲功能的文件输入流,可以通过组合`FileInputStream`和`...
结构型模式如适配器(Adapter)、装饰器(Decorator)和代理(Proxy),关注如何组合和扩展类与对象;行为型模式如观察者(Observer)、模板方法(Template Method)和策略(Strategy),关注对象之间的交互和职责...
在Java中,`java.io`包下的许多类如`BufferedReader`和`PrintWriter`就是装饰器模式的应用。 8. 组合模式(Composite): 组合模式将对象组织成树形结构,允许用户对单个对象和组合对象进行一致的处理。它在处理...