`
zy19982004
  • 浏览: 663755 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:252400
社区版块
存档分类
最新评论

设计模式学习二:观察者模式

 
阅读更多

一.概念

     在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。

     观察者模式也被称之为:主题-观察者模式,发布-订阅模式,前者是一,后者是多。

 

二.UML

  1. Subject(主题类),最主要的方法:添加/删除观察者,改变状态,通知观察者。
  2. Observer(观察者类),当主题状态改变,通知观察者时,触发观察者的update方法。

三.实例分析

     《那些年,我们一起追的女孩》让我回到了高中,想到了以前的同桌,那个我暗恋N久的女孩子。那时候,我们一起下课,一起吃饭,一起逃课,一起翻 墙...往事啊,泪奔 ...好了,回归正题,再说要被大家喷了。我跟她是一个班,我们是一个班主任,班主任不在,我们可以嘻嘻哈哈玩玩耍耍,班主任来了,我们还是得收敛点。

     对比一下概念:班主任是一,我和她是多,我们依赖班主任,班主任状态改变了(不在教室变成了在教室),我们就要做点改变了。

     Teacher

package com.zzy.observer;

import java.util.Observable;
/**
 * 主题
 * @author eason
 *
 */
public class Teacher extends Observable{
	public void setChanged() {
		super.setChanged();
	}
}

 

Student

package com.zzy.observer;

import java.util.Observable;
import java.util.Observer;

/**
 * 观察者
 * @author eason
 *
 */
public class Student implements Observer{

	private String name;
	private String action;
	
	public Student(String name, String action) {
		this.name = name;
		this.action =action;
	}
	
	@Override
	public void update(Observable o, Object arg) {
		System.out.println(this);
	}
	
	@Override
	public String toString() {
		return "学生" + name + action;
	}
}

 

TestObserver

package com.zzy.observer;

/**
 * 测试类
 * @author eason
 *
 */
public class TestObserver {
	public static void main(String[] args) {
		//班主任
		Teacher teacher = new Teacher();
		//我和她
		Student stu1 = new Student("eason", "收起手机");
		Student stu2 = new Student("grace", "停止睡觉");
		//我跟她所属的班主任
		teacher.addObserver(stu1);
		teacher.addObserver(stu2);
		//老师来了
		teacher.setChanged();
		teacher.notifyObservers();
	}
}

     java.util.Observable和java.util.Observer比较简单,有兴趣大家自己去研究下。

 

四.使用场景

  1. 当一个对象的改变会引起其他对象的改变,这个时候,考虑观察者模式。比喻java.util.Swing中的事件监听。

五.使用感受

  1. java.util.Observable内部用一个Vector实现。学习的过程中,自己写一个Observable收获颇多。
  2. 松耦合,主题不知道观察者的具体细节(update方法的具体实现),只要你实现了观察者接口就行。
  3. 主题向观察者推数据。
3
1
分享到:
评论
3 楼 这些年 2014-06-02  
还可以...
2 楼 zy19982004 2012-02-17  
zx246212 写道
o(∩_∩)o 哈哈,例子很通透。

谢谢
1 楼 zx246212 2012-02-17  
o(∩_∩)o 哈哈,例子很通透。

相关推荐

    设计模式之观察者模式

    通过学习观察者模式,你不仅可以提高代码的可维护性和可扩展性,还能更好地理解和利用面向对象设计的原则,如开闭原则(对扩展开放,对修改关闭)。此外,了解并熟练运用观察者模式还有助于你理解和使用其他设计模式...

    设计模式C++学习之观察者模式(Observer)

    观察者模式(Observer)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在C++中广泛应用,特别是在需要...

    快速学习C++设计模式:观察者模式实例代码

    观察者模式是目前应用最广、影响范围最大的模式之一,因为 Observer 的一个实例 MVC结构(Model/View/Control )在系统开发架构设计中有着很重要的地位和意义,实现了业务逻辑和表示层的解耦。下面示例代码以篮球...

    HeadFirst 设计模式学习笔记2--观察者模式 demo

    总的来说,HeadFirst设计模式的学习笔记2关于观察者模式的演示,旨在帮助开发者理解如何使用观察者模式来构建可扩展的系统。通过实际的代码示例,我们可以更深入地掌握这一模式,并将其应用到日常开发中,提升代码的...

    Android 设计模式学习之观察者模式应用实例

    本文将深入探讨一种常用的设计模式——观察者模式(Observer Pattern),并结合Android实际应用给出实例解析。 观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,...

    ObserverDemo观察者设计模式源码

    观察者设计模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的...通过学习和分析源码,我们可以更好地掌握观察者模式的原理和应用场景,提高我们的设计能力。

    跟我一起学 设计模式-观察者模式

    在“跟我一起学 设计模式-观察者模式”这个资源中,我们可能会学习到以下几个关键知识点: 1. **观察者模式的核心概念**:包括主题(Subject)和观察者(Observer)两个主要角色。主题是被观察的对象,它维护着一个...

    iOS 设计模式 观察者模式

    观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为模式。在iOS开发中,它是一种让多个对象监听或订阅某一个主题对象的状态变化,并在状态变化时自动收到通知的方式。这种模式使得...

    观察者模式和设计模式

    观察者模式和设计模式是软件工程中至关重要的概念,它们为构建可维护、可扩展的系统提供了基础。本文将深入探讨这两个设计模式以及与之相关的Java实现。 首先,观察者模式(Observer Pattern)是一种行为设计模式,...

    观察者设计模式demo

    通过分析这个示例,我们可以学习如何在实际项目中应用观察者模式,理解如何在数据变化时维护对象间的松耦合,以及如何在Android开发中有效地更新UI。这种模式对于处理事件驱动和响应式编程场景非常有用,因为它允许...

    设计模式 中的 单例模式和观察者模式

    在Java中,可以使用`java.util.Observable`和`java.util.Observer`接口来实现观察者模式: ```java class Subject extends Observable { void changeState() { setChanged(); // 标记状态已改变 notifyObservers...

    观察者模式案例学习代码

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...

    运用MVC模式及观察者模式的java小程序

    在Java编程领域,设计模式是解决常见问题的模板或最佳实践。在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的...分析和学习这些代码将有助于深入理解MVC和观察者模式的实际应用。

    设计模式:可复用面向对象软件的基础(非扫描版+高清)

    设计模式分为三类:创建型模式(如单例模式、工厂方法模式)、结构型模式(如代理模式、装饰器模式)和行为型模式(如观察者模式、策略模式)。每种模式都有其特定的用途和适用场景。 4. **具体设计模式详解** - ...

    Java设计模式 基础学习,适合初学者入门!

    这份资料非常全面且详细,覆盖了 设计模式 基础学习的方方面面,非常适合初学者入门! 资料也按目录进行编排,每一章下面都有更具体的内容: 结构型模式(7节) 第1节:适配器模式 第2节:桥接模式 第3节:组合模式 ...

    观察者模式模版和例子

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...

    《设计模式:可复用面向对象软件的基础》学习并理解 23 种设计模式

    - **观察者模式**(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 - **状态模式**(State):允许一个对象在其内部状态改变时改变它的...

    java设计模式之观察者模式

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在Java中被广泛应用,特别是...

    新版设计模式手册 - C#设计模式(第二版)

    总之,《新版设计模式手册 - C#设计模式(第二版)》是学习和掌握C#设计模式的宝贵资源,通过学习和实践书中的内容,开发者能够提升软件设计能力,编写出更优雅、可维护的代码。这本书将帮助你从一个代码实现者成长为...

    java设计模式系列之观察者模式代码

    通过学习和实践观察者模式,开发者能够更好地理解如何在对象之间建立松耦合的关系,使代码更易于维护和扩展。同时,它也是实现反应式编程的基础,有助于构建更灵活、响应更快的系统。在Java中,`java.util....

Global site tag (gtag.js) - Google Analytics