觀察者模式:定義了對象之間的一對多的依賴,這樣一來,當一個對象改變狀態時,它的所有依賴者都會收到通知並自動更新。
其實在軟件開發的過程中,這種模式最常見,典型的就是事件監聽。
先是實現監聽接口,然後註冊:
public abstract class MyDialog extends Dialog implements View.OnClickListener {
public void onClick(View v) {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.about);
MyImageView back=(MyImageView)findViewById(R.id.aboutBack);
back.setAmation(Amation.inward);
back.setOnTouchListener(this);
}
}
這裏的MyDialog就是一個觀察者,而back就是主題。
通過這個模式剛好能解決我現在遊戲中的一個問題:
假設現在有三個遊戲界面 1、2、3;這也是界面的彈出順序,並且都不消失。
在第一和第二個界面上都有金錢數量的顯示,但是第三個界面出來以後(比如說某成就達成)使得實際的金錢數量改變了,當你點擊第三個界面的back按鈕離開時要更新第一和第二的界面上金錢的顯示數量。
這時我就像到了這個觀察者模式。
具體的實現就是 定義一個觀察者接口 供有顯示金錢數量的界面實現作爲觀察者,然後在寫一個單利類作爲主題,在創建觀察者的時候調用主題的註冊方法,銷燬觀察者的時候移除觀察者,然後在金錢改變的時候調用主題的更新方法。那麼這兩個界面就會更新金錢顯示的數量了。