激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java回調函數與觀察者模式實例代碼

Java回調函數與觀察者模式實例代碼

2021-03-30 11:48司馬懿字仲達 Java教程

這篇文章主要介紹了Java回調函數與觀察者模式實例代碼,簡單介紹了使用觀察者模式的場景,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

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

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

什么時候使用觀察者模式:

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.demo.test;
import java.util.Observable;
import java.util.Observer;
//觀察者模式里面目標類維護了所有觀察者的引用,而回調里面只是維護了一個引用
public class ObserverCallbackDemo {
    // 觀察者A
    static class ConcreteObserverA implements Observer {
        @Override
            public void update(Observable o, Object arg) {
            System.out.println("ConcreteObserverA update");
        }
    }
    // 觀察者B
    static 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回調函數與觀察者模式實例代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/chy555chy/article/details/52777989

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲经典视频 | 免费欧美一级视频 | 久久人人人 | 国产成人羞羞视频在线 | 一本到免费视频 | 99成人精品视频 | 72pao成人国产永久免费视频 | 亚洲精品久久久久久久久久久 | 亚洲一区在线观看视频 | 91 久久| 日韩一级毛毛片 | 最新日本中文字幕在线观看 | 国产乱淫av片免费观看 | h色视频在线观看 | bt 自拍 另类 综合 欧美 | 青青草好吊色 | xxxxxx中国| 农村寡妇偷毛片一级 | 自偷自偷久产久精九国品在线 | 欧美国产一区二区三区激情无套 | 欧美成人鲁丝片在线观看 | 国产一国产精品一级毛片 | 久久精品欧美一区 | 成人在线观看一区二区三区 | 激情小说另类 | 欧美性受xxxx人人本视频 | 麻豆视频在线免费观看 | 久久性生活免费视频 | 一级外国毛片 | 一区二区三区视频在线观看 | 一本在线高清码电影 | 国产免费一区二区三区 | 无遮挡一级毛片视频 | 中文字幕在线一 | 成人在线视频播放 | 日本在线国产 | 日本中文字幕网址 | 国产九色在线观看 | 国产网站黄 | 羞羞网站在线看 | 国产一区精品视频 |