1. 程式人生 > >簡單理解設計模式之觀察者模式

簡單理解設計模式之觀察者模式

  設計模式其實沒有我們想的那麼難!我們認真的理解好設計模式的概念,知道它到底是解決什麼問題的這才能更好的掌握。下面我們來探討下設計模式裡面的觀察者模式。

 (1)觀察者模式的概念

定義物件間的一種一對多的依賴關係,當一個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。
(2)理解好觀察者模式的概念 我們來分解的消化這句話,首先定義物件的一對多關係,在程式設計開發的過程中,我們一般怎麼表示一對多,是不是通過集合類來實現的呢?然後是當一個物件的狀態發生改變的時候,所有依賴他的物件要得到通知和自動更新。這裡有兩個因素,第一是物件的狀態發生了改變,即是物件的屬性發生了改變,第二是當改變的時候通知依賴他的物件。
(3)通過程式碼來詳細的實現我們的理解過程 step 1 : 建立我們的主題物件,我比較喜歡稱它為老大物件。
/**
 * 老大物件(主題物件)
 * */
public class Subject {
	
	//既然是老大,那就必須要有小弟
	private List<Observer> observer = new ArrayList<Observer>();
	//老大的狀態
	private int state;
	
	public int getState(){
		return state;
	}
	//當老大的狀態發生改變的時候,得通知小弟去搞事情吧
	public void setState(int state){
		this.state = state;
		notifyAllObserver();
	}
	//每一天都有要新加入的小弟
	public void attach(Observer observer){
		this.observer.add(observer);
		
	}
	//有公告要通知每個小弟
	public void notifyAllObserver(){
		for(Observer observer : this.observer){
			observer.update();
		}
	}
}
step 2:觀察者(Object),我一般喜歡稱呼他為小弟模板(要加入我們必須要守規矩)
public abstract class Observer {
	 //心中要有老大
	 protected Subject subject;
	 //接受老大的提示,執行行動
	 abstract void update();
}
step 3 :下面就是各種小弟啦,哈哈
public class FirstObserver extends Observer{
	
	public FirstObserver(Subject subject){
		this.subject = subject;
		this.subject.attach(this);
	}
	@Override
	void update() {
		System.out.println("current state is"+this.subject.getState()+19);
		
	}

}
public class SecondObserver extends Observer{
	
	public SecondObserver(Subject subject){
		this.subject = subject;
		this.subject.attach(this);
	}

	@Override
	void update() {
		System.out.println("current state is"+this.subject.getState()+19);
		
	}
	

}
step 4:大哥說要幹活了
public class testObserver {
	
	public static void main(String[] args) {
		Subject subject = new Subject();
		FirstObserver f = new FirstObserver(subject);
		SecondObserver s =new SecondObserver(subject);
		f.update();
		s.update();
		subject.setState(39);
		
	}

}
結果: current state is3919 current state is3919 current state is88919 current state is88919
好了,其實就是這樣,具體的理解一定要結合開發的經驗。 有不對地方的歡迎指教交流。