Java Design Pattern Observer 观察者模式
来源:互联网 发布:判断字符串像素长度js 编辑:程序博客网 时间:2024/04/24 08:16
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
简而言之,观察者模式=发布者+注册者。
观察者模式用来对GUI中的动作做侦听。Swing GUI的例子就表明了动作侦听是怎样实现观察者模式的。
代码:
1.Subject.java
package com.jiangge.designPatternObserver;import java.util.ArrayList;import java.util.List;//Subject, an object having methods to attach and de-attach observers to a client object. public class Subject {private List<Observer> observers = new ArrayList<Observer>();private int state;public int getState() {return state;}public void setState(int state) {this.state = state;notifyAllObservers();}public void attach(Observer observer) {observers.add(observer);}public void notifyAllObservers() {for (Observer observer : observers) {observer.update();}}}
2. Observer.java
抽象类
package com.jiangge.designPatternObserver;public abstract class Observer { protected Subject subject; public abstract void update();}
3.具体的观察者类:
package com.jiangge.designPatternObserver;public class BinaryObserver extends Observer {public BinaryObserver(Subject subject) {this.subject = subject;this.subject.attach(this);}@Overridepublic void update() {System.out.println("Binary String: " + Integer.toBinaryString(subject.getState()));}}
package com.jiangge.designPatternObserver;public class OctalObserver extends Observer{ public OctalObserver(Subject subject){ this.subject = subject; this.subject.attach(this); } @Override public void update() { System.out.println( "Octal String: " + Integer.toOctalString( subject.getState() ) ); }}
package com.jiangge.designPatternObserver;public class HexaObserver extends Observer{ public HexaObserver(Subject subject){ this.subject = subject; this.subject.attach(this); } @Override public void update() { System.out.println( "Hex String: " + Integer.toHexString( subject.getState() ).toUpperCase() ); }}
4.Use Subject and concrete observer objects.
public class ObserverPatternDemo {public static void main(String[] args) {Subject subject = new Subject();new HexaObserver(subject);new OctalObserver(subject);new BinaryObserver(subject);System.out.println("First state change: 15");subject.setState(15);System.out.println("Second state change: 10");subject.setState(10);}}
5输出结果:
First state change: 15Hex String: FOctal String: 17Binary String: 1111Second state change: 10Hex String: AOctal String: 12Binary String: 1010
观察者模式所涉及的角色有:
● 抽象主题(Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象,抽象主题角色又叫做抽象被观察者(Observable)角色。
● 具体主题(ConcreteSubject)角色:将有关状态存入具体观察者对象;在具体主题的内部状态改变时,给所有登记过的观察者发出通知。具体主题角色又叫做具体被观察者(Concrete Observable)角色。
● 抽象观察者(Observer)角色:为所有的具体观察者定义一个接口,在得到主题的通知时更新自己,这个接口叫做更新接口。
● 具体观察者(ConcreteObserver)角色:存储与主题的状态自恰的状态。具体观察者角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态 像协调。如果需要,具体观察者角色可以保持一个指向具体主题对象的引用。
参考:
1.英文: http://www.tutorialspoint.com/design_pattern/observer_pattern.htm
2.http://www.cnblogs.com/java-my-life/archive/2012/05/16/2502279.html
3.http://www.importnew.com/7924.html importnew网站
- Java Design Pattern Observer 观察者模式
- Java设计模式 Design Pattern:观察者模式 Observer Pattern
- Design Pattern - Observer 观察者设计模式
- Java 观察者模式( Observer Pattern)
- Java Observer Pattern(观察者模式)
- Design Pattern—— Observer Pattern 观察者模式
- Java与模式 观察者模式Observer Pattern
- Java设计模式--观察者模式【Observer Pattern】
- Design Pattern(设计模式- 行为模式)-------Observer(观察者)
- 设计模式之 观察者模式 the observer design pattern
- 设计模式之-观察者模式(Observer Design Pattern)
- 设计模式之观察者模式 (Observer Design Pattern)
- 设计模式学习—观察者模式(Observer Design Pattern)
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern
- linux软链接和硬链接
- OC-KVC/KVO
- 百度地图小案例
- 6、static特点
- [leetcode]Best Time to Buy and Sell Stock I, II, III
- Java Design Pattern Observer 观察者模式
- poj——1094——Sorting It All Out(拓扑排序)
- ANT简明教程[转载]
- jquery的lazyload.js实现图片的懒加载
- 蓝桥杯 历届试题 连号区间数
- Oracle to_char格式化函数
- 7、类中的几个特殊的关键字(this&super&final)
- Gecko 的 New DOM bindings
- jQuery 最新教程序列