Writer
|--TextWriter.
|--MediaWriter
发现可以形成体系,就是无论操作什么数据,但都是操作数据,可以抽取。
操作数据的效率有些低,为了提高这个操作效率,
使用缓冲技术。通过面向对象三个特点中的继承,发现可以继承完成功能的增强。
那么对具体的功能对象进行子类的扩展。
形成了一下的体系。
Writer
|--TextWriter.
|--BufferedTextWriter
|--MediaWriter
|--BufferedMediaWriter
该体系是完全可以应用的。
但是一点不太爽,当该操作数据的体系中如果出现了新的功能对象。
Writer
|--TextWriter.
|--BufferedTextWriter
|--MediaWriter
|--BufferedMediaWriter
|--DataWriter---新的功能对象。
|--BufferedDataWriter
如果后期出现了象DataWriter这样新的功能对象时,为了提高该对象的操作效率,
该对象也需要有一个子类带有缓冲技术。
导致每出现一个新功能子类,该子类都要有一个带缓冲技术的子类。
对于扩展较为麻烦。而且让这个继承体系因为不断扩展而变得非常臃肿。
需要对该体系进行优化,以前是让每一个功能对象都具备缓冲技术,
现在可不可以单独定义一个缓冲技术对象,要缓冲谁,就把谁传进来即可。
class BufferWriter
{
BufferWriter(Writer w)
{
}
/*
BufferWriter(TextWriter tw)
{
}
BufferWriter(MediaWriter mw)
{
}
*/
}
将缓冲技术封装成对象后,那么每一个功能对象就没有必要在定义带有缓冲技术的子类对象了。
体系就变成了
Writer
|--TextWriter.
|--MediaWriter
|--DataWriter
|--BufferWriter
即具备了缓冲功能,又优化了继承体系。
这种优化方式,很爽。可以解决功能增强问题,并比继承更有灵活性。降低了继承体系的复杂性。
为了方便于以后继续使用该优化方式,就给其起了个名字:装饰设计模式。
要记住,装饰类通常和被装饰类都所属于同一个体系。或者同一个接口。
|