A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一帆风顺 中级黑马   /  2012-12-19 23:26  /  1353 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王博 于 2012-12-25 14:30 编辑

对于毕老师视频里说的例子,有点不明白啊,希望能帮忙解释一下
MyReader//专门用于读取数据的类。
                  |--MyTextReader
                  |--MyBufferTextReader
                  |--MyMediaReader
                  |--MyBufferMediaReader
                  |--MyDataReader
                  |--MyBufferDataReader
//这里明白的,这个是MyReader的体系,显得过于臃肿,不建议使用
//于是把MyBufferReader的功能向上抽取就出现了下面的类
class MyBufferReader
{
                MyBufferReader(MyTextReader text)
                {}
                MyBufferReader(MyMediaReader media)
                {}
}
//但是上面这个类扩展性很差。
//于是找到其参数的共同类型。通过多态的形式。可以提高扩展性。
//但是MyBufferResder不是装饰MyReader类的么,怎么变成子类了?
//这里不是很明白,还有我上面的理解如果有不对的,希望给指出来。。。
class MyBufferReader extends MyReader
{
                private MyReader r;
                MyBufferReader(MyReader r)
                {}
}        


2 个回复

倒序浏览
使用装饰模式的优点和缺点
使用装饰模式主要有以下的优点:
    装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。
通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。
这种比继承更加灵活机动的特性,也同时意味着装饰模式比继承更加易于出错。
使用装饰模式主要有以下的缺点:
    由于使用装饰模式,可以比使用继承关系需要较少数目的类。使用较少的类,当然使设计比较易于进行。但是,在另一方面,使用装饰模式会产生比使用继承关系更多的对象。更多的对象会使得查错变得困难,特别是这些对象看上去都很相像。
回复 使用道具 举报
MyReader//专门用于读取数据的类。
                  |--MyTextReader
                  |--MyMediaReader
                  |--MyDataReader
                  |--MyBufferReader
是改为上面这样的形式了,MyBufferedReader继承MyReader,不是用于修饰MyReader类的,是用于修饰MyReader的子类的,
因为子类较多,而且有可能进行扩展,所以MyBufferedReader使用所有子类的共同父类,即MyReader类作为参数类型,以多态的形式实现了该功能,
因为接收的是MyReader类类型的参数,所以,只要是MyReader的子类类型都能够接收并进行修饰。方便了扩展。
class MyBufferReader extends MyReader
{
                private MyReader r;
                MyBufferReader(MyReader r)
                {}
}        
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马