簡單理解設計模式之觀察者模式
阿新 • • 發佈:2018-11-23
設計模式其實沒有我們想的那麼難!我們認真的理解好設計模式的概念,知道它到底是解決什麼問題的這才能更好的掌握。下面我們來探討下設計模式裡面的觀察者模式。
(1)觀察者模式的概念
定義物件間的一種一對多的依賴關係,當一個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。(2)理解好觀察者模式的概念 我們來分解的消化這句話,首先定義物件的一對多關係,在程式設計開發的過程中,我們一般怎麼表示一對多,是不是通過集合類來實現的呢?然後是當一個物件的狀態發生改變的時候,所有依賴他的物件要得到通知和自動更新。這裡有兩個因素,第一是物件的狀態發生了改變,即是物件的屬性發生了改變,第二是當改變的時候通知依賴他的物件。
step 2:觀察者(Object),我一般喜歡稱呼他為小弟模板(要加入我們必須要守規矩)/** * 老大物件(主題物件) * */ 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(); } } }
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
好了,其實就是這樣,具體的理解一定要結合開發的經驗。 有不對地方的歡迎指教交流。