您的位置:首页 > 职场人生

黑马程序员:装饰类的作用——增强被装饰类的方法的功能(利用组合实现复用)

2014-06-26 00:04 429 查看
----------------------java+android开发、android培训、期待与您交流! ----------------------装饰类,的特点在于灵活,高效,可以避免复杂的类的继承体系。装饰类,在疯狂java讲义的5.8.2节出,叫做利用组合实现复用。可以作为参考。
/*
MyReader --专门用于读取数据的类
|--MyTextReader
|--MyBufferedTextReader
|--MyMediaReader
|--MyBufferedMediaReader
|--MyDataReader    //后续可能还需要增加的类
|--MyBufferedDataReader
//为了提高读取速度和效率,引入缓冲区,所以按照上面的逻辑,需要引入多个类来完成各自的缓冲,结构复杂,效率低

可以用一般的装饰类
class MyBufferedReader
{
MyBufferedReader( MyTextReader text)
{}
MyBufferedReader( MyMediaReader media)
{}
MyBufferedReader( MyDataReader data)
{}
//这么做还是开销大,体系复杂。扩展性很差

}

上面这个类的扩展性很差
找到其参数的共同类型,通过多态的形式,可以提高扩展性
class MyBufferedReader extends MyReader
{
<span style="white-space:pre">	</span>private MyReader r;
<span style="white-space:pre">	</span>MyBufferedReader(MyReader r)
<span style="white-space:pre">	</span>{}

}

这个时候,结构为:
MyReader --专门用于读取数据的类
|--MyTextReader
|--MyMediaReader
|--MyDataReader
|--MyBufferedReader

<pre code_snippet_id="406366" snippet_file_name="blog_20140626_1_4508160" class="html" name="code">装饰模式比继承要灵活,避免了继承体系臃肿
而且,降低了类与类之间的关系

装饰类因为增强已有对象,具备的功能呢和已有的是相同的,只不过,提供了更强的功能。
所以,装饰类和被装饰类通常是都属于一个体系中

<span style="font-family: Arial, Helvetica, sans-serif;">*/</span>
</pre>
/*装饰类设计模式:当想要对已有的对象进行功能增强时可以定义类。将已有的对象传入,基于已有的功能,并提供加强功能。那么自定义的该类为装饰类。装饰类通常会通过构造方法接受被装饰的对象。并基于被装饰对象的功能提供更强的功能。*/class Person{public void chifan(){System.out.println("吃饭");}}class SuperPerson{private Person p;SuperPerson(Person p ){this.p = p;}public void SuperChiFan(){System.out.println("开胃酒");p.chifan();System.out.println("吃饭");System.out.println("喝汤");}}class  PersonDemo{public static void main(String[] args){Person p= new Person();SuperPerson sp = new SuperPerson(p);sp.SuperChiFan();}}
----------------------java+android开发、android培训、期待与您交流! ----------------------详细请查看:www.itheima.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐