装饰者模式——动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
装饰者模式就是给一个对象动态的添加新的功能,装饰者和被装饰者实现同一个接口,装饰者持有被装饰者的实例。JAVA中IO就大量使用了装饰者模式,如:
InputStream in = new BufferedInputStream(new FileInputStream("test.txt"));
其 中FileInputStream、BufferedInputStream都实现了InputStream,BufferedInputStream就 是一个装饰者,增加利用缓冲输入来改进性能,以及FileInputStream所没有的readLine()方法来增强接口。
假如我们有一个系统监控的接口,它的功能很简单,就是当系统发生异常时进行处理动作。然后我们实现了一个能够日志记录的实现类,当系统发生异常只要把日志 记录好就可以了。可是后来我们又想记录完日志后需要给维护人员发邮件,根据开闭原则,我们不能去修改记录日志的类啊,所以这时就需要用到装饰模式了,定义 一个能发送邮件的监控接口实现类,它其中保持了一个监控接口的实例(那个能记日志的实现类),这时,我们调用本实现类时,就即能记录日志,又能发邮件了。 再后来,老大又想加一个系统发生严重异常时能电话通知的功能,没关系,再写一个能电话通知的实现类,什么都不用改,OK了!
系统监控的接口:
public interface Monitor { //系统发生异常时的处理方法 public void handle(); }记录日志的实现类:
public class LoggerMonitor implements Monitor { @Override public void handle() { System.out.println("日志已记录;"); } }发送邮件的实现类:
public class EmailMonitor implements Monitor { private Monitor monitor; public EmailMonitor(Monitor monitor){ this.monitor = monitor; } @Override public void handle() { monitor.handle(); System.out.println("邮件已发送;"); } }电话通知的实现类:
public class PhoneMonitor implements Monitor { private Monitor monitor; public PhoneMonitor(Monitor monitor){ this.monitor = monitor; } @Override public void handle() { this.monitor.handle(); System.out.println("已电话通知"); } }
测试类:
public class Test { /** * 装饰者模式——动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 * * 装饰者模式就是给一个对象动态的添加新的功能,装饰者和被装饰者实现同一个接口,装饰者持有被装饰者的实例。 * @param args */ public static void main(String[] args) { //既想记录日志又想邮件通知 Monitor monitor = new EmailMonitor(new LoggerMonitor()); monitor.handle(); System.out.println("------------------------------"); //既想记录日志又想电话通知 monitor = new PhoneMonitor(new LoggerMonitor()); monitor.handle(); System.out.println("------------------------------"); //既想记录日志,又发邮件,又打电话 monitor = new PhoneMonitor(new EmailMonitor(new LoggerMonitor())); monitor.handle(); } }
相关推荐
——————————————————————————————————————————————
Java设计模式学习笔记
总结了java开发中的21种设计模式,详解和例子,带书签的pdf格式,方便阅读!
学习Java设计模式的笔记,标注了其中重要的要点,如果有需要的小伙伴,自行下载哦
良葛格————JavaJDK5.0学良葛格————JavaJDK5.0学习笔记PDF.rar习笔记PDF.rar良葛格良葛格————JavaJDK5.0学习笔记PDF.rar————JavaJDK5.0学习笔记PDF.rar良葛格————JavaJDK5.0学习笔记PDF.rar良...
java学习笔记很适合初学者了解。看了一遍,觉得还行!所以拿上来分享。
Java JDK 6学习笔记——ppt简体版.rar
Java JDK 6学习笔记——ppt简体版加课本代码
java设计模式的学习笔记,其中包含各种模式的代码实现
良葛格的Java学习笔记~讲解得非常详细。JDK5.0的~是Java入门的不错选择。
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
图解java设计模式_学习笔记_java开发解压密码为twj123
Python 笔记源码——内含python后端&机器学习等.zip Python 笔记源码——内含python后端&机器学习等.zip Python 笔记源码——内含python后端&机器学习等.zip Python 笔记源码——内含python后端&机器学习等.zip ...