`
wang吖
  • 浏览: 234597 次
  • 性别: 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--观察者模式 demo http://blog.csdn.net/laszloyu/archive/2010/05/12/5581769.aspx

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

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

    PHP设计模式大全 学习笔记

    在PHP学习中,收集了一些常用的编程方法和思想,集中详细的记录了9种设计模式的设计思路和用法。比如:工厂模式,单例模式,注册模式,适配器模式,观察者模式等

    设计模式笔记(包含所有设计模式)个人总结提炼笔记

    3. 行为型模式:行为型模式关注对象之间的通信和协作,包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。这些模式可以帮助...

    设计模式学习笔记

    2.1观察者模式(不依赖jdk) 博文链接:https://biaowen.iteye.com/blog/505950

    关于自己学习设计模式的笔记整理

    该文档是自己在学习设计模式时整理的常用设计模式pdf文档,包括源码,包括装饰模式,代理模式,责任链模式,命令模式,解释器模式,迭代器模式,备忘录模式,观察者模式,工厂模式,建造者模式,适配器模式,桥梁...

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

    是我在学习设计模式时整理的,其中一些是我自己学习,很多来自网络.希望对模式有兴趣的朋友有帮助,我会很高兴.

    java-design-patterns:Java 设计模式学习笔记

    Java Design PatternsJava 设计模式学习笔记,简单易懂,每个模式都有相应的代码示列,帮助学习理解。在线阅读地址:设计原则创建型模式作用:将创建与使用代码解耦结构型模式作用:将不同的功能代码解耦桥接模式...

    java-patterns:Java 23种基本的设计模式整料整理学习,责任链模式过滤器,工厂模式BeanFactory,观察者模式ContextListen等。结合Spring源码理解学习

    describe:设计模式学习笔记 逻辑结构图 代码结构图 设计模式简述 创建型模式,共五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式,共七种:适配器模式,装饰器模式,代理模式,...

    PHP常用的三种设计模式汇总

    本篇文章是学习PHP中常用的三种设计模式的笔记及总结,不管采用哪一门语言开发什么,几乎都会使用到设计模式,我们为什么需要设计模式呢?它的诞生对于我们开发人员来说有什么样的作用与意义呢? 相信做iOS开发的...

    design-patterns--node.js:该存储库可用于学习设计模式以及编写更好的Node.js代码。 它包含一些经典的GoF设计模式的集合,这些模式使用JavaScript和ES6类以及Node.js API在JavaScript中实现

    该存储库可用于学习设计模式以及编写更好的Node.js代码。 它包含一些经典的GoF设计模式的集合,这些模式使用JavaScript和ES6类以及Node.js API在JavaScript中实现。 感谢并非常欢迎您做出贡献,调整现有模式的...

    asp.net知识库

    VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...

    左程云leetcode-hjLearningNotes:hj学习笔记

    第一部分:设计模式 & UML 简单工厂 工厂方法模式 抽象工厂模式 策略模式 责任链模式 命令模式 模板方法模式 适配器模式 代理模式 外观模式 组合模式 装饰模式 享元模式 桥接模式 Builder模式 状态模式 解释器模式 ...

    java8源码-akangaroo:学习笔记,完善中

    学习笔记较长,如果想查看文章的目录,chrome浏览器可以配合简悦插件使用,或者下载到本地使用Typora打开。 :hot_beverage: Java基础 Java容器 Java并发 数据结构和算法 数据结构 树 图 算法 分治 动态规划 回溯 ...

    java-design-patterns:java 学习模式

    设计模式之UML 类图以及类间关系(泛化 、实现、依赖、关联、聚合、组合) 类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试...

    软件工程课堂笔记+期末试题

    能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面、循环依赖都是如何设计和实现的。 阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更...

    study-notes:个人学习笔记

    study-notes个人学习笔记目录JavaScriptCSSHTML碎片知识点lifecircleReact虚拟DOMJSXbuild-your-own-reactHTTPHttp 协议跨域HTTPSTCP/IP资源缓存js设计模式策略模式中介者模式单例模式观察者模式发布订阅模式数据...

    hope::artist_palette: Java 学习笔记

    避坑笔记2021CICDCI/CD流程以及原理说明设计模式:策略模式单例模式工厂模式装饰器模式观察者模式适配器模式模板方法模式SpringBoot:SpringBoot(1):公共配置SpringBoot(2):generatorSpringBoot(3):docker部署...

    java核心面试笔记+核心知识源码降解

    能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面、循环依赖都是如何设计和实现的。 阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也...

Global site tag (gtag.js) - Google Analytics