设计模式-观察者模式(Observer)
2013-06-25 16:15
465 查看
摘要: 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
<p>Observer.java</p> <div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:613cf5c0-e32f-4bc0-9128-4562a774f1f0" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 400px; height: 116px;" style=" width: 400px; height: 116px;overflow: auto;">package cn.foxeye.design.observer;
public interface Observer {
}
</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>Subject.java</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:85481259-b3a5-4731-9e08-0edbd5847752" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 602px; height: 418px;" style=" width: 602px; height: 418px;overflow: auto;">package cn.foxeye.design.observer;
import java.util.ArrayList;
import java.util.List;
public abstract class Subject {
}
</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>ConcreteObserver.java</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:20b56b5f-32bd-4aa2-a61c-cc433a457380" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 605px; height: 540px;" style=" width: 605px; height: 540px;overflow: auto;">package cn.foxeye.design.observer;
public class ConcreteObserver implements Observer {
}
</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>ConcreteSubject.java</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:d7aa01ec-f20a-4b25-ae4b-0563db4042ea" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 605px; height: 264px;" style=" width: 605px; height: 264px;overflow: auto;">package cn.foxeye.design.observer;
public class ConcreteSubject extends Subject {
}
</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>ObserverDesignDemo.java</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:c2553ba7-f9fb-4b0f-bc8a-6bc25875ff04" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 628px; height: 309px;" style=" width: 628px; height: 309px;overflow: auto;">package cn.foxeye.design.observer;
public class ObserverDesignDemo {
}
</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>Observer.java</p> <div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:613cf5c0-e32f-4bc0-9128-4562a774f1f0" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 400px; height: 116px;" style=" width: 400px; height: 116px;overflow: auto;">package cn.foxeye.design.observer;
public interface Observer {
void update(String state);
}
</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>Subject.java</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:85481259-b3a5-4731-9e08-0edbd5847752" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 602px; height: 418px;" style=" width: 602px; height: 418px;overflow: auto;">package cn.foxeye.design.observer;
import java.util.ArrayList;
import java.util.List;
public abstract class Subject {
private List<Observer> observers = new ArrayList<Observer>(); public void attach(Observer observer) { this.observers.add(observer); System.out.println("Attached an Observer. "); } public void dettach(Observer observer) { this.observers.remove(observer); System.out.println("Remove an Observer."); } public void notifyObservers(String state) { for (Observer observer : observers) { observer.update(state); } }
}
</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>ConcreteObserver.java</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:20b56b5f-32bd-4aa2-a61c-cc433a457380" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 605px; height: 540px;" style=" width: 605px; height: 540px;overflow: auto;">package cn.foxeye.design.observer;
public class ConcreteObserver implements Observer {
private String name; private String state; public ConcreteObserver(String name) { this.name = name; } public void update(String state) { setState(state); System.out.println(name + "状态修改为:" + state); } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getName() { return name; } public void setName(String name) { this.name = name; }
}
</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>ConcreteSubject.java</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:d7aa01ec-f20a-4b25-ae4b-0563db4042ea" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 605px; height: 264px;" style=" width: 605px; height: 264px;overflow: auto;">package cn.foxeye.design.observer;
public class ConcreteSubject extends Subject {
private String state; public String getState() { return state; } public void changeState(String state) { this.state = state; System.out.println("主题状态变为:" + state); this.notifyObservers(state); }
}
</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>ObserverDesignDemo.java</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:c2553ba7-f9fb-4b0f-bc8a-6bc25875ff04" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 628px; height: 309px;" style=" width: 628px; height: 309px;overflow: auto;">package cn.foxeye.design.observer;
public class ObserverDesignDemo {
public static void main(String[] args) { ConcreteSubject subject = new ConcreteSubject(); for (int i = 0; i < 10; i++) { Observer observer = new ConcreteObserver("张三" + i); subject.attach(observer); } subject.changeState("已读"); }
}
</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
相关文章推荐
- 设计模式之观察者模式(Observer)
- C# 通过 Observer观察者 设计模式 来理解 抽象类 和 接口 应用在什么地方
- 设计模式----观察者模式Observer(C++)
- 观察者设计模式( Observable类Observer接口)
- Head-first设计模式(二)——观察者模式(Observer Pattern)
- 二十四种设计模式:观察者模式(Observer Pattern)
- 设计模式观察者模式(ObserverPatern)
- 设计模式之Observer(观察者模式)
- 设计模式学习系列十二:观察者模式(Observer)
- 设计模式之观察者(Observer)模式与其C++通用实现(中)
- Observer(观察者)设计模式[转]
- 观察者设计模式(observer)
- 设计模式18:Observer 观察者模式(行为型模式)
- C#委托与事件之观察者Observer设计模式
- 我所理解的设计模式(C++实现)——观察者模式(Observer Pattern)
- php 设计模式 观察者observer模式
- 设计模式 - 观察者模式(Observer Pattern) Java内置 用法
- Java开发中的23种设计模式详解----观察者模式(Observer)
- 设计模式之观察者模式(Observer)