`
wang吖
  • 浏览: 240678 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式之观察者模式学习笔记

阅读更多

         观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。

 

写一个模拟实例:

1、被观察者自身的行为活动的抽象

/**
 * 角色:被观察者自身的行为活动
 * 
 * 知己知彼观察者模式:间谍观察韩非子的活动
 * 
 * @author - 2014-6-23 吖大哥 创建初始版本
 * 
 */
public interface IHanFeiZi {

	// 韩非子踢足球
	public void playFootBall();

	// 韩非子思考问题
	public void thinkQuestion();
}

 

2、被观察者对象

/**
 * 角色:被观察者对象
 * 
 * 被观察者可以自动添加多个不同的观察者并可以移除观察者对象
 * 
 * @author - 2014-6-23 吖大哥 创建初始版本
 * 
 */
public interface Observeable {

	// 添加
	public void addObserver(Observer o);

	// 删除
	public void delObserver(Observer o);

	// 通知
	public void notifyObserver(String context);
}

 

3、被观察者实例对象

import java.util.ArrayList;
import java.util.List;

public class HanFeiZi implements IHanFeiZi, Observeable {

	private List<Observer> list = new ArrayList<Observer>();

	@Override
	public void addObserver(Observer o) {
		list.add(o);
	}

	@Override
	public void delObserver(Observer o) {
		list.remove(o);
	}

	@Override
	public void notifyObserver(String context) {
		for (Observer ob : list) {
			ob.update(context);
		}
	}

	@Override
	public void playFootBall() {
		System.out.println("韩非子要踢世界杯了***************");
		this.notifyObserver("踢足球");
	}

	@Override
	public void thinkQuestion() {
		System.out.println("韩非子开始思考战略谋划了***************");
		this.notifyObserver("思考问题");
	}

}

 

4、观察者行为抽象

/**
 * 角色:观察者抽象行为
 * 
 * 当发现被观察者行为变动之后自身做出相应的反应
 * 
 * @author - 2014-6-23 吖大哥 创建初始版本
 * 
 */
public interface Observer {

	public void update(String context);
}

 

5、具体观察者实现

       5.1  观察者1

//观察者李斯
public class Lisi implements Observer {

	@Override
	public void update(String context) {
		System.out.println("Lisi 观察到了韩非子在进行:" + context);
	}

}

 

       5.2  观察者2

//观察者王斯
public class WangSi implements Observer {

	@Override
	public void update(String context) {
		System.out.println("Wangsi 观察到了韩非子在进行:" + context);
	}

}

 

6、客户端调用测试

//测试客户端   当被观察者执行某个活动之后则会广播给所有的监听观察者,与此同时观察者会做出相应的反应
public class Client {

	public static void main(String[] args) throws InterruptedException {
		HanFeiZi han = new HanFeiZi();

		// 创建观察者
		Observer lisi = new Lisi();
		Observer wangsi = new WangSi();

		// 对被观察者添加观察者对象
		han.addObserver(lisi);
		han.addObserver(wangsi);

		// 被观察者执行活动
		han.playFootBall();

		Thread.sleep(2000);
		System.out.println("\n ================================ \n");

		// 被观察者执行活动
		han.thinkQuestion();
	}
}

 

7、类图结构

 

  • 大小: 115.8 KB
分享到:
评论
1 楼 genan 2017-07-24  
示例简单易懂,感谢LZ分享  

相关推荐

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

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

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

    尚硅谷设计模式源码笔记课件.zip

    行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式) 2) 学习目标:通过学习,学员...

    C#设计模式学习笔记

    以下是对“C#设计模式学习笔记”中涉及的一些关键知识点的详细解释。 1. **设计模式的基本概念**: 设计模式是一种在特定上下文中已被证明有效的解决方案模板,它描述了如何在软件设计中解决常见问题。设计模式...

    23种设计模式学习笔记及源码

    这个压缩包文件包含了23种设计模式的学习笔记和源码,旨在帮助开发者深入理解并熟练运用这些模式。以下是对每种设计模式的详细解释,以及它们在Java编程中的应用。 1. **单例模式**:确保一个类只有一个实例,并...

    设计模式笔记

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决问题的...设计模式笔记中的内容应该涵盖了以上所述的各种模式,通过深入学习和实践,你可以将这些模式应用到实际项目中,提升自己的编程技能和设计能力。

    根据《JAVA与设计模式》整理的笔记及示例代码

    这份"根据《JAVA与设计模式》整理的笔记及示例代码"涵盖了Java语言和设计模式的核心概念,旨在帮助开发者理解和应用这些模式。 一、设计模式的基本概念 设计模式是对在特定情境下软件设计问题的解决方案的一种描述...

    设计模式学习笔记

    本学习笔记将重点关注“观察者模式”,这是一种行为设计模式,用于在对象之间定义一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的主要组成部分包括...

    图解设计模式 ,结城浩著 学习笔记

    根据给定的信息“图解设计模式,结城浩著学习笔记”,我们可以推断出这份文档主要涉及了设计模式的学习和理解。《图解设计模式》是一本由日本著名程序员结城浩撰写的书籍,该书以图形化的方式深入浅出地讲解了软件...

    图解java设计模式_学习笔记_java开发

    这份"图解java设计模式_学习笔记"是针对Java开发者深入理解和应用设计模式的重要资源。在这里,我们将深入探讨Java设计模式的核心概念、分类以及它们在实际开发中的应用。 设计模式分为三大类:创建型、结构型和...

    《设计模式解析》第2版学习笔记

    ### 《设计模式解析》第2版学习笔记关键知识点总结 #### 第一部分 面向对象软件开发简介 ##### 第一章 面向对象范型 - **面向对象范型概览**: - 本章通过对比结构化程序设计来引入面向对象的概念。 - 强调了...

    Head.First 设计模式学习笔记.pdf

    ### Head.First 设计模式学习笔记知识点总结 #### 一、设计模式概述 设计模式是一种用于解决软件设计中常见问题的标准化方法。通过采用设计模式,开发者可以提高代码的复用性、灵活性和可维护性。《Head First 设计...

    观察者模式

    在Head First的观察者模式学习笔记中,我们可以深入理解这个模式的原理和应用。首先,观察者模式涉及到两个主要的角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它可以是任何具有可变状态的对象...

    《设计模式》学习笔记

    ### 设计模式学习笔记 #### 引言 设计模式(Design Patterns)是在软件设计领域内广泛应用的一种实践指南,它提供了一系列解决常见问题的方案。设计模式可以被理解为面向对象软件设计的经验总结,是对特定面向对象...

    java设计模式学习笔记,以及各种模式的代码实现

    16. **观察者模式**(订阅者模式):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 17. **命令模式**:将请求封装为一个对象,以便使用不同的请求、...

    台湾人写的设计模式笔记

    通过阅读这份笔记,读者不仅可以学习到设计模式的基本概念,还能了解到如何在Java环境中实际运用这些模式,提升编程技能。设计模式的学习和掌握是成为一名优秀程序员的必经之路,它们能帮助我们写出更高效、更灵活、...

    学习笔记-深入浅出设计模式

    在《深入浅出设计模式》的学习笔记中,我们可以看到几种关键的设计模式及其应用,包括策略模式、观察者模式、装饰者模式、工厂模式和抽象工厂模式。 1. **策略模式**: - 策略模式的核心在于将算法族封装在独立的...

    设计模式学笔记

    ### 设计模式学习笔记 #### 一、设计模式概述 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。设计...

Global site tag (gtag.js) - Google Analytics