欢迎来到天天文库
浏览记录
ID:40313348
大小:67.50 KB
页数:5页
时间:2019-07-30
《设计模式 (十)装饰模式(Decorator)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、设计模式(十)装饰模式(Decorator)装饰模式(Decorator)就是使用被装饰的一个子类的实例,在客户端将这个子类的实例委托给装饰类。装饰模式是结成关系的一个替代方案。简单的装饰模式是原理图入下:装饰模式以对客服端透明的方式增添了对象的功能,其在与动态的给对象添加了责任,当然这里的继承便是静态的。其中重要的地方时装饰对象和真是对象有相同的接口,这样客户端就可以和真是对象一样的交互方式和装饰对象交互,然后装饰对象把所有从客户端接收过来的请求全部转发给真是对象,然后在返还给客户端,这样装饰对象就可以再转发
2、前或者以后添加一些附加功能而不影响对真是对象的操作,这样在不改变原有类的基础想,可以实现对于原有类的这种额外功能的实现,增强了程序的复用性。同时装饰模式比继承好的地方就是,装饰模式可以动态的对已经存在的类进行任意的组合,实现想要的功能,而继承是静态的实现,不能改变原有类的实现,如果要添加更多的功能,只有添加更多的派生类来实现,这个简洁在下面的例子里对于最后一次打印输出就有很明显的效果,定义好了两个装饰类以后,不用再定义第三个就可以实现两个装饰类排列组合的效果。下面就简单的做了一个通过对于手机接电话的一个扩展,接
3、听电话之前有一个彩铃,接受电话之后会回拨一段广告,这样就出来了下面的例子:[java] viewplaincopy1.package com.designpattern.decorator; 2. 3.public interface Phone { 4. public void recevieCall(String name); 5.} [java] viewplaincopy1.package com.designpattern.decorator; 2. 3.public class
4、ChinaMobile implements Phone { 4. 5. @Override 6. public void recevieCall(String name) { 7. System.out.println("step recevie " + name + " call"); 8. } 9. 10.} [java] viewplaincopy1.package com.designpattern.decorator; 2. 1.public ab
5、stract class Decorator implements Phone { 2. 3. private Phone phone; 4. 5. public Decorator(Phone phone) { 6. this.phone = phone; 7. } 8. 9. @Override 10. public void recevieCall(String name) { 11. this.phone.recevieCal
6、l(name); 12. } 13. 14.} [java] viewplaincopy1.package com.designpattern.decorator; 2. 3.public class RingBeforeChinaMobileDecorator extends Decorator { 4. 5. public RingBeforeChinaMobileDecorator(Phone phone) { 6. super(phone); 7. }
7、 8. 9. @Override 10. public void recevieCall(String name) { 11. System.out.println("step ring before recevie " + name + "call"); 12. super.recevieCall(name); 13. } 14. 15.} [java] viewplaincopy1.package com.designpattern.decor
8、ator; 2. 3.public class AdAfterChinaMobileDecorator extends Decorator { 4. 5. public AdAfterChinaMobileDecorator(Phone phone) { 6. super(phone); 7. } 1. 2. @Override 3.
此文档下载收益归作者所有