黑马程序员:装饰类的作用——增强被装饰类的方法的功能(利用组合实现复用)
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
相关文章推荐
- 黑马程序员:装饰类的作用——增强被装饰类的方法的功能(利用组合实现复用)
- 地址方法[ios开发]利用有道翻译API实现简单的翻译功能地址方法
- 【装饰设计模式】写一个MyBufferedReader实现自己的ReadLine方法、增强BufferedReader的ReaderLine()
- 5.8.2 利用组合实现复用
- 利用jQuery方法实现选项卡的功能
- 一种利用js实现的仿淘宝商品评价功能的方法
- 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。 给定一个stri
- 黑马程序员_反射的作用实现框架功能
- 利用PostgreSQL 9.5的外部表的继承功能,实现类似数据分片的方法
- php利用scws实现mysql全文搜索功能的方法
- 利用PHP绘图函数实现简单验证码功能的方法
- 利用特性给方法实现自定义的功能
- 利用继承和组合实现软件复用
- 利用Array Prototype的方法来实现对dom集合的筛选、indexOf、map等功能
- 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
- 利用组合实现复用
- 利用字符出现的次数,编写一个方法,实现基本的字符串压缩功能。
- 黑马程序员——基础加强——反射的作用,实现框架功能
- 黑马程序员-JAVA学习之工厂方法模式,工厂类用反射功能实现
- 继承的拓展(利用组合来实现复用)