设计模式-----观察者模式(Obsever)
2015-10-01 11:56
435 查看
它定义了对象之间一对多的依赖关系。因此,。当一个对象的状态变化,对吸毒成瘾者,他将收到通知和更新自己主动。
观察者模式的组成:
抽象主题角色:把全部对观察者对象的引用保存在一个集合中。抽象主题提供一个接口。能够添加和删除观察者角色。
详细主题角色:在详细主题内部状态改变时,给全部登记过的观察者发出通知。
抽象观察者角色:为全部详细的观察者定义一个接口,在得到主题的通知时更新自己。
详细观察者角色:该角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。
观察者模式UML图:
[b]观察者模式演示样例代码:
[/b]
[b]主题接口类 Subject.java
[/b]
[b]详细主题类(能够实现多个) ConcreteSubject[b].java
[/b][/b]
[b]观察者接口类 Observer[b].java
[/b][/b]
[b]详细观察者类[b](能够实现多个)ConcreteObserver.java
[/b][/b]
測试类 Test.java
观察者模式用途:
[b][b]Android。ios中的Notification即用观察者模式实现。
Java中的事件监听也用观察者模式实现。
[/b][/b]
[b][b]多个对象(一对多,多对多)之间通讯能够用观察者模式,主题和观察者之间的耦合度非常低,可拓展性非常强!
[/b][/b]
[b]转载请注明出处:http://blog.csdn.net/xn4545945
[/b]
观察者模式的组成:
抽象主题角色:把全部对观察者对象的引用保存在一个集合中。抽象主题提供一个接口。能够添加和删除观察者角色。
详细主题角色:在详细主题内部状态改变时,给全部登记过的观察者发出通知。
抽象观察者角色:为全部详细的观察者定义一个接口,在得到主题的通知时更新自己。
详细观察者角色:该角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。
观察者模式UML图:
[b]观察者模式演示样例代码:
[/b]
[b]主题接口类 Subject.java
[/b]
public interface Subject { public void addObserver(Observer observer); public void removeObserver(Observer observer); public void notifyObservers(String str); }
[b]详细主题类(能够实现多个) ConcreteSubject[b].java
[/b][/b]
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); } } }
[b]观察者接口类 Observer[b].java
[/b][/b]
public interface Observer { public void update(String str); }
[b]详细观察者类[b](能够实现多个)ConcreteObserver.java
[/b][/b]
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("命令! 。"); } }
观察者模式用途:
[b][b]Android。ios中的Notification即用观察者模式实现。
Java中的事件监听也用观察者模式实现。
[/b][/b]
[b][b]多个对象(一对多,多对多)之间通讯能够用观察者模式,主题和观察者之间的耦合度非常低,可拓展性非常强!
[/b][/b]
[b]转载请注明出处:http://blog.csdn.net/xn4545945
[/b]
相关文章推荐
- _范例讲解:一对多关系
- Unity 获得Log
- 自定义UIActionSheet
- JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作(《剑指offer》)
- Mysql安装各种问题
- swift开发笔记9 - 正向和反向页面传参
- 贝叶斯算法
- 实战体会Java的多线程编程
- Android 事件处理详解(二) —— 基于回调的事件处理
- Float 水平居中浮动
- android模拟器
- 运用CSS实现float:center 居中浮动li
- JavaScript类型检测
- 冒泡排序
- java中调用dll文件的两种方法
- ubuntu下各种格式解压速查表
- 咳嗽痰多吃冰糖雪梨
- JDK中设计模式-包含类结构
- 理解HTTP/304响应
- 计算沙盒中Libray/Caches目录里所有文件的大小