Writer
|--TextWriter
|--MediaWirter
该体系的出现已经可以完成对文本数据和媒体数据的写操作。
但是发现。效率较低。为了提高效率,就加入了缓冲技术。
文本写入需要缓冲
媒体写入需要缓冲
按照面向对象的思想,为了提高扩展,
通过继承的方式完成。
Writer
|--TextWriter
|--BufferedTextWriter
|--MediaWirter
|--BufferedMedieWriter
这就完成了文本和媒体数据写操作效率提高。
当如果该体系加入一个子类 BaseWriter,而且该子类也许要效率提高。
Writer
|--TextWriter
|--BufferedTextWriter
|--MediaWirter
|--BufferedMedieWriter
|--BaseWriter
|--BufferedBaseWriter
如果体系扩展,都需要定义一个该子类具备高效缓冲功能的子类。
这样体系扩展很麻烦。
如何把这个体系出现问题解决一下,并优化一下呢?
我们发现,这些子类使用的缓冲技术都是一样的。
缓冲区其实就是定义了临时存储容器将数据进行临时缓冲,
至于具体的写操作,还是Writer的子类对象完成的,比如 TextWriter. MediaWriter等。
既然这样,可以将缓冲技术单独封装成一个对象,
要对哪个具体对象进行缓冲技术的使用,只要将该对象传递给缓冲区对象即可。
//对缓冲区对象进行单独描述。
class BufferedWriter extends Writer
{
BufferedWriter(Writer w)
{
}
// BufferedWriter(TextWriter tw)
// {}
// BufferedWriter(MediaWriter dw)
// {}
}
当缓冲技术单独封装成了对象后,它具备的还是写功能,只不过可以其他对象的写功能进行高效。
所以它还是Writer类中的一员。
所以这时体系变成了
Writer
|--TextWriter
|--MediaWirter
|--BufferedWriter:这是一个提供增强功能的类。就把这种优化方式,定义成一种最终的解决该问题的解决方案
并起个名字:装饰设计模式。
和原来的体系,变的很清爽。
Writer
|--TextWriter
|--BufferedTextWriter
|--MediaWirter
|--BufferedMedieWriter
装饰设计模式的出现可以对一组类进行功能的增强。
而且装饰类本事也是该体系中的一个子类。
代码体现:
通常情况下,
装饰类一般不单独存在。
都是通过构造函数接收被装饰的对象。
基于被装饰的对象的功能,并对外提供增强行的功能。
装饰模式和继承都可以增强类的功能。
装饰模式:通过某种方法将被装饰的类的对象传入进该类,通常是在构造方法中传入。然后,再在类中写增强功能的方法,这些方法的内部,使用传入的被装式的对象的方法去实现的。
继承模式:如果需要对哪个类的方法的功能进行增强,那么就继承该类。并对要增强的方法进行重写,这样就可以实现方法功能的增强。
|