Java回呼函數與觀察者模式執行個體代碼,回呼函數觀察者

來源:互聯網
上載者:User

Java回呼函數與觀察者模式執行個體代碼,回呼函數觀察者

本文研究的主要是Java回呼函數與觀察者模式的實現,具體介紹和實現代碼如下。

觀察者模式(有時又被稱為發布(publish )-訂閱(Subscribe)模式、模型-視圖(View)模式、源-收聽者(Listener)模式或從屬者模式)是軟體設計模式的一種。在此種模式中,一個目標物件管理所有相依於它的觀察者物件,並且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的方法來實現。此種模式通常被用來實現事件處理系統。

什麼時候使用觀察者模式:
  1. 當一個抽象模型有兩個方面, 其中一個方面依賴於另一方面。將這二者封裝在獨立的對象中以使它們可以各自獨立地改變和複用。
  2. 當對一個對象的改變需要同時改變其它對象, 而不知道具體有多少對象有待改變。
  3. 當一個對象必須通知其它對象,而它又不能假定其它對象是誰。換言之, 你不希望這些對象是緊密耦合的。

其實觀察者模式同前面講過的橋樑、策略有著共同的使用環境:將變化獨立封裝起來,以達到最大的重用和解耦。觀察者與後兩者不同的地方在於,觀察者模式中的目標和觀察者的變化不是獨立的,而是有著某些聯絡。

在Java中通過Observable類和Observer介面實現了觀察者模式。一個Observer對象監視著一個Observable對象的變化,當Observable對象發生變化時,Observer得到通知,就可以進行相應的工作。

package com.demo.test;import java.util.Observable;import java.util.Observer;//觀察者模式裡面目標類維護了所有觀察者的引用,而回調裡面只是維護了一個引用public class ObserverCallbackDemo {// 觀察者Astatic class ConcreteObserverA implements Observer {@Override    public void update(Observable o, Object arg) {System.out.println("ConcreteObserverA update");}}// 觀察者Bstatic class ConcreteObserverB implements Observer {@Override    public void update(Observable o, Object arg) {System.out.println("ConcreteObserverB update");}}// 被觀察對象static class ConcreteObservable extends Observable {public void changeValue() {//protected方法只能在子類被調用setChanged();notifyObservers();}}// 回呼函數介面interface ICallback {public void onCall();}// 回調類static class CallbackDemo {private ICallback callback;public void setListener(ICallback callback) {this.callback = callback;}public void call() {callback.onCall();}}public static void main(String[] args) {// 觀察者ConcreteObserverA observerA = new ConcreteObserverA();ConcreteObserverB observerB = new ConcreteObserverB();ConcreteObservable observable = new ConcreteObservable();observable.addObserver(observerA);observable.addObserver(observerB);System.out.println("countObservers = " + observable.countObservers());observable.changeValue();// 回呼函數CallbackDemo callbackDemo = new CallbackDemo();callbackDemo.setListener(new ICallback() {@Override      public void onCall() {System.out.println("callback onCall");}});callbackDemo.call();}}

輸出結果:

countObservers = 2
ConcreteObserverB update
ConcreteObserverA update
callback onCall

總結

從上面代碼可以看出:回呼函數應該屬於觀察者模式的一種,目的是為了替代循環配置資源,將組件之間的耦合性降低。觀察者模式裡面目標類維護了所有觀察者的引用,而回調裡面只是維護了一個引用。

以上就是本文關於Java回呼函數與觀察者模式執行個體代碼的全部內容,希望對大家有所協助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支援!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.