设计模式-----观察者模式(Obsever)
它定义了对象之间一对多的依赖关系。因此,。当一个对象的状态变化,对吸毒成瘾者,他将收到通知和更新自己主动。
观察者模式的组成:
抽象主题角色:把全部对观察者对象的引用保存在一个集合中。抽象主题提供一个接口。能够添加和删除观察者角色。
详细主题角色:在详细主题内部状态改变时,给全部登记过的观察者发出通知。
抽象观察者角色:为全部详细的观察者定义一个接口,在得到主题的通知时更新自己。
详细观察者角色:该角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。
观察者模式UML图:
观察者模式演示样例代码:
主题接口类 Subject.java
public interface Subject {
public void addObserver(Observer observer); public void removeObserver(Observer observer); public void notifyObservers(String str);
}
详细主题类(能够实现多个) ConcreteSubject.java
import java.util.ArrayList; public class ConcreteSubject implements Subject {
ArrayList<Observer> observers = new ArrayList<Observer>(); public void addObserver(Observer observer) {
observers.add(observer);
} public void removeObserver(Observer observer) {
observers.remove(observer);
} @Override
public void notifyObservers(String str) {
//通知全部观察者
for (Observer o : observers) {
o.update(str);
}
}
}
观察者接口类 Observer.java
public interface Observer {
public void update(String str);
}
详细观察者类(能够实现多个)ConcreteObserver.java
public class ConcreteObserver implements Observer { @Override
public void update(String str) {
System.out.println("通知了observer--》 " + str);
}
}
測试类 Test.java
/**
* 測试观察者模式
*
* @author neng
*
*/
public class Test { public static void main(String[] args) {
// 仅仅要是实现接口的观察者与主题就可以. 多对多
ConcreteObserver observer1 = new ConcreteObserver();
ConcreteObserver observer2 = new ConcreteObserver(); ConcreteSubject concreteSubject1 = new ConcreteSubject(); concreteSubject1.addObserver(observer1);
concreteSubject1.addObserver(observer2);
concreteSubject1.notifyObservers("这个是消息! !! 。"); concreteSubject1.removeObserver(observer2);
concreteSubject1.notifyObservers("命令! 。");
} }
观察者模式用途:
Android。ios中的Notification即用观察者模式实现。
Java中的事件监听也用观察者模式实现。
多个对象(一对多,多对多)之间通讯能够用观察者模式,主题和观察者之间的耦合度非常低,可拓展性非常强!
转载请注明出处:http://blog.csdn.net/xn4545945
版权声明:本文博主原创文章。博客,未经同意不得转载。
设计模式-----观察者模式(Obsever)的更多相关文章
- 18. 星际争霸之php设计模式--观察者模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- linkin大话设计模式--观察者模式
linkin大话设计模式--观察者模式 观察者模式定义了对象间的一对多依赖关系,让一个或者多个观察者观察一个对象主题.当主题对象的状态发生改变的时候,系统能通知所有的依赖于此对象的观察者对象,从而能自 ...
- java设计模式--观察者模式(Observer)
java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...
- js设计模式-观察者模式
定义: 观察者模式又叫发布订阅模式,它定义了对象间的一种一对多的依赖关系.观察者模式让两个对象松耦合地联系在一起,虽然不太清楚彼此的细节,但这不影响他们之间的互相通信. 思路 定义一个对象,在对象中实 ...
- 【设计模式】Java设计模式 - 观察者模式
[设计模式]Java设计模式 - 观察者模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 @一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长 ...
- [Head First设计模式]山西面馆中的设计模式——观察者模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 引言 不知不自觉又将设计模式融入生活了,吃个饭也不得安生,也发现生活中的很多场景,都可以用设计模式来模拟.原来设计模式就在 ...
- javascript 设计模式-----观察者模式
观察者模式在设计模式中被重点提到,因为它应用的场景非常多,而且在模块化设计当中扮演着非常重要的角色.MVC模式中最底层的就是观察者模式,当下流行的javascript框架backbone就是很好地运用 ...
- c#设计模式-观察者模式
Observer 与 Subject 互为耦合,但是这种耦合的双方都依赖于抽象,而不依赖于具体. 一.观察者模式 目的 我们都知道解决一个问题有N种解决方式,但在面向对象的设计中如何能做到“高内聚,低 ...
- JAVA 设计模式 观察者模式
用途 观察者模式 (Observer) 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观 ...
随机推荐
- pygame在安装过程中无法找到videodev.h错误
首先参考<ubuntu 安装 pygame 非常好玩的东西>.在运行sudo python setup.py时.出现 linux/videodev.h:No such file or di ...
- c语言来实现c++
闲来没事,看了看sqlite的源代码,突然想用c实现c++,写了例如以下demo,自我感觉不错 #include <stdio.h> #include <stdlib.h> s ...
- Java垃圾回收机制以及内存泄露
1.Java的内存泄露介绍 首先明白一下内存泄露的概念:内存泄露是指程序执行过程动态分配了内存,可是在程序结束的时候这块内存没有被释放,从而导致这块内存不可用,这就是内存 泄露,重新启动计算机能够解决 ...
- uva11600 状压期望dp
一般的期望dp是, dp[i] = dp[j] * p[j] + 1; 即走到下一步需要1的时间,然后加上 下一步走到目标的期望*这一步走到下一步的概率 这一题,我们将联通分块缩为一个点,因为联通块都 ...
- Windows Phone开发(29):隔离存储C
原文:Windows Phone开发(29):隔离存储C 本文是隔离存储的第三节,大家先喝杯咖啡放松,今天的内容也是非常简单,我们就聊一件东东--用户设置. 当然了,可能翻译为应用程序设置合适一些,不 ...
- leetcode第一刷_Pow(x, n)
高速乘方的算法,写了好多变,出了各种错,真是服了我自己了. 思想是每次对n减半,将当前的temp平方.须要注意的是假设当前的n是个奇数,减半之后会丢失掉一次乘积,因此假设当前的n为奇数,应该先在结果里 ...
- POJ 1002 487-3279 Trie解读
这个问题的解决方法是多种多样的.如本文所用,Trie为了解决这个问题. 它也可用于hash表.map等解决方案,由于输入是特定7数字,因此,你应该能够解决. 如本文所用,Trie不是非常快.最后,我主 ...
- 通过action 跨进程启动activity
在一些场景中我们需要从一个进程启动另外的一个应用的activity,这有什么好办法? 这里介绍一种方法,通过自定义 action 通过filter来启动. 如果你需要启动一个你自己写的另一个app的a ...
- [改变自己wordpress.2]至wordpress再加上简单的debug sql调试.
或者说,同事. 需要帮助她打印出来sql 调试输出到页面sql 在这里,我们使用插件或一个的方式来启动配置文件wordpress的debug 在插件文件夹 wordpress/wp-content/p ...
- J2SE习题(2)
第四.五周练习题 1.a. Define a class called BlogEntry that could be used to store an entry for a Weblog. Th ...