首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

从装点者设计模式学习Java IO

2012-09-22 
从装饰者设计模式学习Java IO?一个类的功能扩展可以有两种方式:(1)类的继承(高耦合,会产生更多的子类,从而

从装饰者设计模式学习Java IO

?

一个类的功能扩展可以有两种方式:(1)类的继承(高耦合,会产生更多的子类,从而引起类的爆炸)(2)对象组合即装饰模式(降耦,不会创造更多的子类)动态的为对象添加功能)所以类应该对扩展开放,对修改关闭 。
装饰者设计模式注意事项:
(1)装饰者和被装饰者必须具有相同的超类型。 (2) 装饰者即可以包装被装饰者,也可以包装装饰者。往往利用多层包装来达到目的。

(3) 装饰者中组合了被装饰者对象(装饰类的关键特征)。使得我们能够通过嵌套装饰来动态扩展行为。

四个概念:

?(1) 抽象的构件角色(Component):
??? 它是一个接口,封装了将要添加的功能(方法)。
??? 它相当于IO中的InputStream。(或 OutputStream)

(2) 具体的构件角色(ConcreteComponent):
它是一个类,该类实现了Component接口,因此该类中封装了将要添加的功能的一种实现方法。

(3) 装饰角色(Decorator):它是一个类,该类也实现了Component接口,同时也必须持有接口Component的对象的引用,
该类也实现了Component接口中的方法。
a:该类的构造方法需要传递过来一个Component对象的引用。
b:重写的方法(即是添加的功能)需要调用Component对象的该方法。

(4) 具体的装饰角色(Decorator类的子类,可以有一个,也可以有多个):
这些类继承了类Decorator,要重写父类的方法(要添加的功能),和自身的构造方法。
a:构造方法要用到super。
b:第一步:super父类的该方法。
????第二步:添加自己的功能(一些句子)。

?

装饰者:JavaIO框架和Collection框架

(一) Java IO框架JDK5.0中60多个IO流类组成了四大家族:InputStream,OutputStream,Reader,Writer。

InputStream/OutputStream是对字节序列进行操作的抽象类。

Reader/Writer是基于Unicode代码单元进行操作的抽象类。

?

InputStream 具有读入功能的抽象被装饰器。

FileInputStream? 具有读入文件功能的具体被装饰器

?FilterInputStream? 具备装饰器的抽象意义

?BufferedInputStream?? 具有具体功能(缓冲功能)的装饰器

?

?InputStream:字节序列输入类鼻祖---------------------- Component? public abstract classInputStream implements Closeable?最基本的读取字节的抽象方法,供子类扩展。?public abstract int read() throws IOException; ??FileInputStream: 读取文件中的字节流类继承InputStream------------ConcreteComponent?public class FileInputStream extends InputStream?构造函数?publicFileInputStream(String name) throws FileNotFoundException?本地方法,与操作系统低层交互的具体读入方法?publicnative int read() throws IOException; (基于本地方法的底层实现,java调用非java程序实现)

?FilterInputStream: 过滤流类,起装饰器作用,用于对输入装配各种功能 ------------ Decorator?publicclass FilterInputStream extends InputStream ?用于记录被装饰者,也就是需要装配新功能的InputStream对象?protected volatile InputStream in; ?构造装饰器? in用来设置需要被包装InputStream对象 ?protectedFilterInputStream(InputStream in) {this.in = in; //设置需要被包装InputStream对象 }?读入字节 ?publicint read() throws IOException { return in.read(); } ??BufferedInputStream: 使输入流具有缓冲功能,是一种可以装配缓冲功能的装饰器,继承FilterInputStream ---------------------------ConcreteDecorator?publicclass BufferedInputStream extends FilterInputStream ?//构造器????in就是被装配缓冲功能的InputStream

public BufferedInputStream(InputStream in) { this(in, defaultBufferSize);

热点排行