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

JAVA设计模式学习笔记2——观察者模式

阅读更多

观察者模式——定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

     观察者模式是说,当一个对象的状态发生改变的时候,关心这个对象的所有对象都会接到通知,并作出相应的反应。比如,公司的OA系统提供了消息订阅功能,当有新的消息产生时,所有订阅了该消息的员工都会接到通知,这就是观察者模式。

    观察者模式的核心是一个主题接口,一个观察者接口,任何实现了主题接口的实现类都可以被观察者订阅(如会议通知、项目动态都可以被员工订阅),任何实现了观察者接口的实现类都可以订阅、或取消订阅一个主题(如中层员工订阅了会议通知、基础员工订阅了项目动态)。

 

主题接口:

public interface Subject {
	//注册一个观察者
	public void registerObserver(Observer o);
	//移除一个观察者
	public void removeObserver(Observer o);
	//通知所有观察者
	public void notifyObservers();
}

 观察者接口:

public interface Observer {
	//观察者作出反应
	public void update();
}

 一个消息主题(主题接口的实现类),主题记录了所有的观察者列表和主题的状态,当主题的状态发生改变时,可以通知所有订阅者做出相应的反应:

 

import java.util.ArrayList;

public class MsgSubject implements Subject {
	
	private ArrayList<Observer> observers;//观察者列表
	private String msg;//消息(状态)
	
	public MsgSubject(){
		this.observers = new ArrayList<Observer>();
	}
	
	@Override
	public void registerObserver(Observer o) {
		observers.add(o);
	}

	@Override
	public void removeObserver(Observer o) {
		int i = observers.indexOf(o);
		if (i >= 0) {
			observers.remove(i);
		}
	}

	@Override
	public void notifyObservers() {
		for (Observer o : this.observers) {
			o.update();
		}
	}
	
	//获取主题状态的方法
	public String getMsg() {
		return msg;
	}
	
	//设置主题状态的方法
	public void setMsg(String msg) {
		this.msg = msg;
	}
}

 

 观察者1:

public class Observer1 implements Observer {

	private MsgSubject msgSubject;//记录主题的引用,当主题状态发生变化时,可向主题获取状态信息
	
	public Observer1(MsgSubject msgSubject){
		this.msgSubject = msgSubject;
		msgSubject.registerObserver(this);//向主题注册此观察者
	}
	
	@Override
	public void update() {
		System.out.println("Observer1收到通知:" + this.msgSubject.getMsg());
	}

}

 

 观察者2:

public class Observer2 implements Observer {

	private MsgSubject msgSubject;//记录主题的引用,当主题状态发生变化时,可向主题获取状态信息
	
	public Observer2(MsgSubject msgSubject){
		this.msgSubject = msgSubject;
		msgSubject.registerObserver(this);//向主题注册此观察者
	}
	
	@Override
	public void update() {
		System.out.println("Observer2收到通知:" + this.msgSubject.getMsg());
	}

}

 

 测试类:

public class Test {

	/**
	 * 观察者模式——定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
	 * 
	 * 主题接口的实现类记录了所有的观察者列表和主题的状态,可以向一个主题注册或取消注册一个观察者,
	 * 当主题的状态发生改变时,可以通知所有订阅者做出相应的反应
	 * @param args
	 */
	public static void main(String[] args) {
		MsgSubject msgSubject = new MsgSubject();
		Observer1 o1 = new Observer1(msgSubject);
		Observer2 o2 = new Observer2(msgSubject);
		
		msgSubject.setMsg("第一条消息");//改变主题状态
		msgSubject.notifyObservers();//通知所有观察者作出反应
		
		msgSubject.setMsg("第二条消息");//改变主题状态
		msgSubject.notifyObservers();//通知所有观察者作出反应
		
		msgSubject.removeObserver(o1);//观察者1取消订阅
		msgSubject.setMsg("第三条消息");//改变主题状态
		msgSubject.notifyObservers();//通知所有观察者作出反应
	}

}

 

0
1
分享到:
评论
1 楼 di1984HIT 2015-02-06  
学习了,学习了、~

相关推荐

    Java学习笔记——良葛格

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

    Java入门学习笔记

    设计模式是解决常见编程问题的模板,如单例模式、工厂模式和观察者模式。最后,笔记可能会介绍Java标准库的一些重要部分,如JDBC(Java数据库连接)用于数据库操作,或者Swing和JavaFX用于构建图形用户界面。 每道...

    学习笔记——资料

    【Java学习笔记——全面解析】 Java作为一种广泛应用的高级编程语言,是软件开发领域的核心力量。这份"学习笔记——资料"涵盖了Java学习的各个方面,旨在帮助初学者和有经验的开发者巩固基础,提升技能。以下是对这...

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

    12. **设计模式**:设计模式是解决常见软件设计问题的经验总结,如单例模式、工厂模式、观察者模式等,熟练掌握设计模式可以提高代码质量和可维护性。 13. **框架应用**:Spring、MyBatis、Hibernate等框架极大地...

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

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

    从Java菜鸟到专家的资料

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

    java学习笔记

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

    李兴华java word版全部笔记

    15. **设计模式**:涵盖了常见的设计模式,如单例、工厂、观察者、装饰者等,以及如何在实际编程中应用这些模式。 这份文档集是学习Java编程的宝贵资源,它不仅包含理论知识,还提供了丰富的示例代码,帮助学习者...

    java笔记与java核心内容解读

    12. **设计模式**:设计模式是解决软件设计中常见问题的模板,如单例模式、工厂模式、观察者模式等,它们是成为优秀Java开发者的重要组成部分。 这份"java笔记与java核心内容解读"将详细阐述以上知识点,通过实例和...

    软件设计师软考笔记.zip

    这份压缩包包含了博主在学习过程中记录的详细笔记,以及一份精心整理的设计模式表格,旨在帮助备考者系统、高效地掌握相关知识。 首先,我们来探讨一下“软考”——这是一项国家级的专业技术资格认证考试,旨在评测...

    Java开发详解.zip

    031114_【第11章:Java常用类库】_观察者设计模式笔记.pdf 031115_【第11章:Java常用类库】_正则表达式笔记.pdf 031116_【第11章:Java常用类库】_定时调度笔记.pdf 031201_【第12章:JAVA IO】_File类笔记.pdf ...

    java学习心得体会

    通过分析开源项目或Java标准库,可以了解实际应用中的最佳实践和设计模式。比如观察ArrayList和HashMap的实现,可以学习如何优化数据结构和算法。 理论与实践相结合的同时,还要注重工具的使用。IntelliJ IDEA、...

    达内java培训笔记

    在深入Java编程时,你会接触到更多的面向对象概念,比如接口(Interface)、抽象类(Abstract Class)、访问修饰符(Public、Private、Protected、Default)、构造器(Constructor)、final关键字、static关键字、...

    遇见狂神说的全套java视频笔记

    12. **设计模式**:设计模式是解决常见软件设计问题的成熟解决方案,如单例模式、工厂模式、观察者模式等,它们在Java开发中被广泛应用。 “狂神说全部笔记内容”可能详细地解析了以上各个知识点,并通过实例和练习...

    跃达创新java笔记

    12. **设计模式**:理解并应用常见的设计模式(如单例、工厂、观察者、装饰器等),可以提高代码的可维护性和复用性。 13. **Java EE**:对于进阶学习,了解Java企业级应用开发,如Servlet、JSP、JPA、Spring框架等...

    最全的java达内笔记

    - **设计模式**:单例、工厂、观察者等常见设计模式及其在Java中的实现。 总之,"最全的java达内笔记"应是一个全面的学习资源,不仅覆盖EJB,还可能深入到Java的各个方面,旨在帮助学习者构建扎实的Java技能,从而...

    Java_Architect_Notes-John_H.rar_architect_java architect

    2. **设计模式与重构**:设计模式是解决软件设计中常见问题的最佳实践,如工厂模式、单例模式、观察者模式等。重构则是改善代码结构,提高可读性和可维护性的重要手段。学习如何在实际项目中应用这些模式,能提升...

    java从刚刚开始到集合的详细代码和笔记教程.rar

    5. **设计模式**:学习常见的设计模式,如工厂模式、单例模式、观察者模式、装饰者模式等,有助于写出高效、可维护的代码。 6. **反射机制**:通过反射,可以在运行时动态地获取类的信息并调用其方法,增强程序的...

    JavaLearning:Java学习笔记与练习代码,2021.01.24

    11. **设计模式**:设计模式是软件设计中的一些常见解决方案,如单例模式、工厂模式、观察者模式等。学习和应用设计模式可以提高代码的可读性和可维护性。 这个"JavaLearning"压缩包可能还包含了一些练习题目和解决...

    小贝程序员生活\课件\java\javaclass\thirteen lesson.rar

    6. **设计模式**:可能讲解一些常见的设计模式,如单例模式、工厂模式、观察者模式等,这些都是提高代码可读性和可维护性的关键。 7. **JVM内部工作原理**:可能介绍垃圾收集机制、内存模型、类加载过程等,帮助...

Global site tag (gtag.js) - Google Analytics