`
wuhongyu
  • 浏览: 407329 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

JAVA设计模式学习笔记3——装饰者模式

阅读更多

装饰者模式——动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

    装饰者模式就是给一个对象动态的添加新的功能,装饰者和被装饰者实现同一个接口,装饰者持有被装饰者的实例。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();
	}

}
 
0
2
分享到:
评论
1 楼 di1984HIT 2015-02-06  
写的真不错~

相关推荐

    java设计模式学习笔记

    ### Java设计模式学习笔记——外观模式(Facade Pattern) #### 概述 设计模式是软件工程领域中一种解决常见问题的可复用解决方案。在Java开发过程中,掌握设计模式能够帮助开发者更好地组织代码结构,提高代码的...

    Java学习笔记——良葛格

    【Java学习笔记——良葛格】是一份由爱好者良葛格整理的Java学习资料,主要以PDF格式呈现,虽然可能不完整,但包含了丰富的Java编程基础知识和实践技巧,旨在为初学者提供一个学习和参考的平台。以下是笔记中可能...

    JAVA学习笔记第七天——示例代码Day07

    在"JAVA学习笔记第七天——示例代码Day07"的压缩包中,你可以找到相关的示例代码,包括这些概念的实际应用。通过阅读和实践这些代码,你将更深入地理解访问修饰符、final关键字、接口以及接口和类的关系在实际编程中...

    Java入门学习笔记

    "Java入门第三季学习笔记"可能涵盖了更多高级话题,如反射、注解、设计模式和Java库的使用。反射允许程序在运行时检查类、接口、字段和方法的信息,提供了更大的灵活性。注解是一种元数据,可以用来提供编译器或运行...

    学习笔记——资料

    这份"学习笔记——资料"涵盖了Java学习的各个方面,旨在帮助初学者和有经验的开发者巩固基础,提升技能。以下是对这份资料的详细解读: 1. **Java基础** - **变量与数据类型**:Java提供了基本数据类型如整型(int...

    jsp学习笔记——初学者的选择

    【JSP学习笔记——初学者的选择】 JSP(JavaServer Pages)是JavaEE平台中用于构建动态网页的应用技术。作为初学者,理解JSP的基本概念和技术特性至关重要。 1. **为何选择JSP?** JSP的出现主要是为了解决...

    Java NIO学习笔记——ByteBuffer用法

    ByteBuffer的用法是Java NIO学习中的核心内容。 首先,我们了解下ByteBuffer的基本概念。ByteBuffer是一个字节缓冲区,可以存储字节序列。在NIO中,所有的数据读写都通过缓冲区进行,ByteBuffer与其他类型的Buffer...

    个人学习的java笔记——思维导图

    这份"个人学习的java笔记——思维导图"涵盖了上述诸多Java编程的核心知识点,通过思维导图的方式,使得学习者可以更直观地理解和记忆这些复杂的概念,对提升Java学习效果大有裨益。无论你是初学者还是有经验的开发者...

    java设计模式(收集整理,学习笔记)

    Java设计模式是软件开发中的一种重要思想,它是一种在特定情境下解决常见问题的模板,可以提高代码的可重用性、可维护性和灵活性。在Java中,设计模式主要分为三大类:创建型、结构型和行为型。下面将详细讨论在给定...

    Java中jqGrid 学习笔记整理——进阶篇(二)

    在本篇Java中jqGrid的学习笔记整理中,我们将聚焦于jqGrid与后台Java服务的数据交互。jqGrid是一款强大的JavaScript库,用于创建动态、交互式的表格,而这里的进阶篇(二)将涉及到如何通过Java后端来提供数据支持。 ...

    java多线程学习笔记02(csdn)————程序.pdf

    在这个学习笔记中,主要讨论了Java中的线程同步机制,包括volatile关键字、synchronized以及Lock接口,特别是ReentrantLock的使用。 首先,对于线程1和线程2的疑惑,调试(debug)模式并不能改变线程的执行顺序。...

    Thinking in Java 自学笔记——第一章 对象导论

    Thinking in Java 自学笔记——第一章 对象导论 本章节总结了面向对象程序设计(Object-oriented Programming, OOP)的基本概念和原则,以帮助读者更好地理解 Java 编程语言。以下是对标题、描述、标签和部分内容的...

    从Java菜鸟到专家的资料

    8. **JAVA设计模式.chm**:设计模式是软件工程中的重要概念,这本书详细介绍了23种经典设计模式,如单例模式、工厂模式、观察者模式等,对提升代码质量和可维护性有极大帮助。 9. **Oracle optimizer.chm**:可能...

    J2EE学习笔记--DAO设计模式基础.txt

    ### J2EE学习笔记——DAO设计模式基础 #### 一、引言 在J2EE(Java 2 Enterprise Edition)开发中,DAO (Data Access Object) 设计模式是一种常用的数据访问层实现方式,用于分离业务逻辑与数据访问逻辑,使得程序...

    java学习笔记

    ### Java学习笔记知识点详解 #### 一、Java面向对象编程思想 面向对象编程(Object-Oriented Programming, OOP)是Java的核心特性之一。通过封装、继承和多态这三个基本特征来实现。OOP能够提高代码的复用性和可...

    MLDN——Java Web 开发实战经典源码笔记(基础篇)|

    《MLDN——Java Web开发实战经典源码笔记(基础篇)》是一本专注于Java Web开发的实战教程,旨在帮助读者从零开始掌握Web应用的开发技术。这本书通过深入浅出的讲解和丰富的实例代码,全面介绍了Java Web开发的基础...

    重新整理后的Oracle OAF学习笔记——离线版本

    这篇重新整理后的“Oracle OAF学习笔记”旨在帮助开发者深入理解并熟练掌握OAF的相关技术和实践。下面将详细阐述OAF的主要概念和关键知识点。 1. **OAF概述**: Oracle Application Framework 是Oracle为EBS开发的...

    良葛格Java JDK 5.0 学习笔记 - 文字编辑器制作

    综上所述,《良葛格Java JDK 5.0 学习笔记——文字编辑器制作》不仅提供了关于Java编程的具体指导,还深入探讨了软件工程的最佳实践,如需求分析、设计模式、界面设计原则以及持续集成和重构等高级主题。这对于初学...

Global site tag (gtag.js) - Google Analytics