java观察者模式
来源:互联网 发布:伦敦留学 知乎 编辑:程序博客网 时间:2024/06/15 03:44
1、定义
观察者模式定义了对象之间的一对多的依赖关系,这样一来,当一个对象的状态发生变化时,它的所有依赖者都会收到通知并自动更新。
2、特点
由抽象主题(Subject)角色(提供一个接口可以加上或撤销观察者对象)、抽象观察者(Observer)角色(为所有的具体观察者定义一个接口,在得到通知时更新自己)、 具体主题角色(保存对具体观察者对象有用的内部状态;在这种内部状态改变时给其观察者发出一个通知;具体主题角色又叫作具体被观察者角色)、具体观察者角色(保存一个指向具体主题对象的引用;和一个与主题的状态相符的状态。具体观察者角色实现抽象观察者角色所要求的更新自己的接口,以便使本身的状态与主题的状态匹配)。
3、UML类图
4、Demo
import java.util.ArrayList; interface Observer{public void update(String message);} class ConcreteObserver implements Observer { public ConcreteObserver(Subject subject) { subject.registerObserver(this);}@Overridepublic void update(String message) {System.out.println(message);} } interface Subject{public void registerObserver(Observer o);public void removeObserver(Observer o);public void notifyObservers();} class ConcreteSubject implements Subject{ private ArrayList<Observer> observers; private String message; public ConcreteSubject() { observers = new ArrayList<Observer>(); }@Overridepublic void registerObserver(Observer o) {observers.add(o);}@Overridepublic void removeObserver(Observer o) {int i = observers.indexOf(o);if (i > 0){observers.remove(i);}}@Overridepublic void notifyObservers() {for (int i = 0; i < observers.size(); i ++){Observer observer = observers.get(i);observer.update(message);}}public void setMessage(String message){this.message = message;notifyObservers();}}public class ObserverGenerater{public static void main(String[] args) {ConcreteSubject subject = new ConcreteSubject();ConcreteObserver concreteObserver= new ConcreteObserver(subject);subject.setMessage("Hello World");subject.setMessage("test");}}
5、Java的观察者模式实现
- java观察者模式
- java观察者模式
- Java 观察者模式
- Java实现观察者模式
- Java实现观察者模式
- Java 中的观察者模式
- Java观察者模式
- java Observer 观察者模式
- 观察者模式(Java)
- java 接口 观察者模式
- java观察者模式
- Java之观察者模式
- Java 观察者模式
- java 观察者模式
- java中的观察者模式
- java 观察者模式
- java观察者模式介绍
- java观察者模式
- HDU 3549 Flow Problem 解题报告(EK)算法
- dsm
- ASP.NET 发布后提示未预编译文件错误的解决
- HDOJ-2795 Billboard [线段树][单点更新+单点查询+维护区间最值]
- C-字符串函数大全
- java观察者模式
- 最新『资源分享』IT视频教程
- lion 安装 ruby 1.9.3
- pythonchallenge--2
- Python语言获取脚本文件所在路径
- Why Explore Space?(我们为什么要探索宇宙)
- 百度与谷歌SEO的10大区别
- 屏蔽电脑右下角弹广告
- 那些年,曾经的爱