標籤:
1.什麼是觀察者模式:
先把觀察者模式文縐縐的定義搬上來,觀察者模式:定義了對象之間的一對多的以來,當一個對象狀態改變 時,他的全部依賴者都會收到通知而且自己主動更新.
事實上定義說的也並非那麼文縐縐,以下我們來舉一個範例:對於一個班來說,有若干個學生,一個班主任.僅僅要有通知的時候,班主任會給每一個學生髮送飛信來通知大家.當有一個孩子想增加這個班的時候他僅僅需告訴班主任來注冊就能夠增加這個班.當他增加這個班以後呢,這個班有什麼通知的話他也會收到班主任發的飛信.當有某個同學不想呆在這裡轉班了,他會通知班主任把自己移除,以後班級裡的通知他便收不到了.班主任與學生的關係例如以所看到的:
事實上,這就是觀察者模式,學生相當於觀察者,僅僅要老師這邊一有什麼通知(發生改變),然後作為觀察者的學生便會知悉,並作出處理.因此:主題+觀察者=觀察者模式.
2.觀察者模式的實現方法:
我們要實現觀察者能通過主題的介面注冊和移除,主題能通過觀察者的介面接收通知.他們之間的關係為:
首先,定義主題的介面:
package com.john;public interface Subject {public void addObserver(Observer o);public void removeObserver(Observer o);public void notifyObservers();}然後,定義我們的觀察者介面:
package com.john;public interface Observer {public void update(String message);}然後接下來就是定義我們的老師類:
package com.john;import java.util.ArrayList;public class Teacher implements Subject {private ArrayList<Observer> observers;private String message;public Teacher(){observers = new ArrayList<Observer>();}public void addObserver(Observer o) {observers.add(o);}public void removeObserver(Observer o) {int i = observers.indexOf(o);if(i > 0){observers.remove(i);}}public void notifyObservers() {for (Observer o : observers) {o.update(message);}}public void ReceiveMessage(String message){this.message = message;notifyObservers();//接受到新的通知,通知全部學生}}然後定義我們的學生類:
package com.john;public class Student implements Observer {private String name;private String message;public Student(String name,Teacher t){this.name = name;t.addObserver(this);}public void update(String message) {this.message = message;processmessage();}public void processmessage(){System.out.println("學生"+name+"收到通知."+message);}}最後,來一個主函數查看我們的學生能否即時收到老師發送的訊息呢?
package com.john;public class Main {public static void main(String args[]){Teacher teacher = new Teacher();Student xiaoming = new Student("小明",teacher);Student xiaohua = new Student("小華",teacher);Student xiaohong = new Student("小紅",teacher);teacher.ReceiveMessage("今天的作業是抄一遍課文");teacher.ReceiveMessage("明天不用來上學了");}}看一看我們的執行結果:
通過我們的執行結果,我們可以看到,僅僅要老是發送訊息,我們的學生就行即時的收到.
3.總結
觀察者模式中,當主題有新的變化的時間,觀眾可以始終接收資訊本身並接受加以解決.
著作權聲明:本文部落格原創文章。部落格,未經同意,不得轉載。
文章4片 觀察者模式