Observer觀察者模式

設計模式的基本思想面向接口編程是核心。

軟件開發中經常會遇到一個狀態的改變而相應的觸發一系列的連鎖事件。相對這種應用場景的實現方式也是多種多樣的可以通過設置回調方法等。但是從降低耦合,縮小程序變動影響的方面考慮使用觀察者模式無疑是個不錯的選擇。

在觀察者模式中主要包括:被觀察者,觀察者;

被觀察者:從類圖中可以看到,類中有一個用來存放觀察者對象的Vector容器,這個Vector容器是被觀察者類的核 心,另外還有三個方法:add方法是向這個容器中添加觀察者對象;remove方法是從容器中移 除觀察者對象;sendNotify方法是依次調用觀察者對象的對應方法。這個角色可以是接口,也可 以是抽象類或者具體的類,因爲很多情況下會與其他的模式混用,所以使用抽象類的情況比較多。

觀察者:觀察者角色一般是一個接口,它只有一個update方法,在被觀察者狀態發生變化時,這個方法就會被觸 發調用。

本實例的類圖如下:

觀察者模式是一種常用的觸發機制,它形成一條觸發鏈,依次對各個觀察者的方法進行處理。但同時,這也算是觀察者模式一個缺點,由於是鏈式觸發,當觀察者比較多的時候,性能問題是比較令人擔憂的。並且,在鏈式結構中,比較容易出現循環引用的錯誤,造成系統假死。

java語言中,有一個接口Observer,以及它的實現類Observable。具體使用清查API

package obsever;

public interface Observer {
	
	public void update();
	
}

————————————————---
package obsever;


public class Observer1 implements Observer{

	@Override
	public void update() {
		// TODO Auto-generated method stub
		System.out.println("我是Observer1,收到跟新消息");
	}
}
————————————————
package obsever;

public class Observers implements Observer{

	@Override
	public void update() {
		// TODO Auto-generated method stub
		System.out.println("我是Observers收到更新數據");
	}

}
——————————————————————
package obsever;

import java.util.Vector;

public class Subject {
	private Vector<Observer> vector = new Vector<Observer>();

	protected void Add(Observer ob) {
		// TODO Auto-generated method stub
		vector.add(ob);
	}

	protected void remove(Observer ob) {
		// TODO Auto-generated method stub
		vector.remove(ob);
		}

	public void sendnotify() {
		// TODO Auto-generated method stub
		for(Observer a : vector){
			a.update();
		}

	}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章