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));
posted on 2008-04-20 11:35
缘来如此 阅读(342)
评论(0) 编辑 收藏 所属分类:
Java