美文网首页
Java-设计模式之装饰设计模式

Java-设计模式之装饰设计模式

作者: 码农随想录 | 来源:发表于2018-07-21 16:18 被阅读11次

装饰设计模式

需求;
提高读取文本的效率,使用缓冲技术,提供一个读取文本更高效的读取方法。
覆盖TextReader中的方法。建立高效的read方法。所以建立一个TextReader的子类,用以高效的读取。
Reader  
|--TextReader  
    |--BufferedTextReader
|--MediaReader

需求2:读取媒体数据也想高效,那就同理,也给读取媒体数据的对象派生一个高效子类
Reader  
|--TextReader  
    |--BufferedTextReader
|--MediaReader
    |--BufferedMediaReader

发现了一个小问题,如果Reader中还有读取其他数据的子类,如果要高效,那岂不是还要给这个子类添加一个高效子类?
是的。为了给具体的读取数据的对象增加一些功能,是需要通过子类来完成的。
但是这样做,会导致这个继承体系很臃肿!仅仅为了增加一些功能,而进行继承,不建议的。

这些子类无非就是需要高效,而且这些高效的功能实现是一致的。就是提供了一个缓冲区而已。
没有必要每一个对象都存在一个功能重复的子类。

干脆,单独定义一个具备这个缓冲功能的对象,哪个子类需要被缓冲,就将哪个子类传递进来。
class BufferedReader extends Reader{
        
    private [];提供数组。
    BufferedReader(Reader r){// 对Reader高效就哦了 。
        
    }
    read(){操作的是数组}//高效的读取动作。
}

Reader  
    |--TextReader  
    |--MediaReader
    |--BufferedReader
    
发现这种设计方式减少了继承体系的臃肿,增减了功能,比继承更为灵活。
这种设计方式单独定义一个名称:装饰设计模式。
解决问题:给一组类增加功能, 避免继承的臃肿,提高灵活。
注意:装饰类和被装饰类必须所属于同一个体系,通常装饰类都会提供构造函数接收被装饰类对象。
装饰类通常不单独存在。

相关文章

网友评论

      本文标题:Java-设计模式之装饰设计模式

      本文链接:https://www.haomeiwen.com/subject/cqbhmftx.html