设计模式-观察者模式(Observer)

本文通过具体实例详细介绍了观察者模式的实现方式。包括定义观察者接口、被观察者类及具体的观察者和被观察者实现,并展示了如何在实际场景中使用观察者模式。

<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&lt;Observer&gt; observers = new ArrayList&lt;Observer&gt;();

public void attach(Observer observer) {
	this.observers.add(observer);
	System.out.println(&quot;Attached an Observer. &quot;);
}

public void dettach(Observer observer) {
	this.observers.remove(observer);
	System.out.println(&quot;Remove an Observer.&quot;);
}

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 + &quot;状态修改为:&quot; + 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(&quot;主题状态变为:&quot; + 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 &lt; 10; i++) {
		Observer observer = new ConcreteObserver(&quot;张三&quot; + i);
		subject.attach(observer);
	}

	subject.changeState(&quot;已读&quot;);

}

} </pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>

转载于:https://my.oschina.net/foxeye/blog/140331

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值