装饰模式的基本作用就是增加被装饰者的功能。
一般会定义个接口,这个接口是装饰者和被装饰者的超类。定义了被装饰者的核心功能、装饰者需要加强的功能点。
第二会有一个对核心类实现超类的接口,是业务的核心数据的实现,是被装饰的对象。
第三会一个抽象的装饰者,该装饰者持有被装饰的对象。
第四会有若干的具体的装饰者,这些装饰者类就是被装饰对象的增加功能点。
************************************************************************************************************************************
JDK中InputStream、OutputStream定义了流的基本操作。ByteArrayInputStream、StringInputStream、FileInputStream等作为具体的被装饰者,直接继承了InputStream。FilterInputStream作为一个抽象的装饰者,其作为基类,定义了DataInputStream、BufferedInputStream、LineNumberInputStream等多个装饰者类。
在此模式下,就能够生成基于Buffer的FileInputStream:
DataInputStream inputStream = new DataInputStream(new BufferedInputStream(new FilterInputStream("xxxx")));
另外,Java IO中,存在字节流和字符流两种处理方式,InputStream、OutStream及其派生类都是基于字节流进行处理;Reader、Writer及其派生类都是基于字符流进行处理的。字符流和字节流中间使用InputStreamReader、OutputStreamWriter进行转换。
其中FileReader就是基于InputStreamReader进行实现的。
StringReader则是基于String的charAt进行read处理的,而非基于byte数组进行。