国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看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回調函數觀察者模式的實現(xiàn),具體介紹和實現(xiàn)代碼如下。

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

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

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

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

在Java中通過Observable類和Observer接口實現(xiàn)了觀察者模式。一個Observer對象監(jiān)視著一個Observable對象的變化,當Observable對象發(fā)生變化時,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回調函數與觀察者模式實例代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文字幕精品视频 | 青青草原综合久久大伊人精品 | av黄色在线免费观看 | 中文色视频| 艹逼短视频 | 精品久久久久久久久久久久久久 | 国产欧美精品在线 | 欧美日韩一区二区三区不卡视频 | 久久精品国产清自在天天线 | 精品久久久久久亚洲综合网 | 91小视频| 黄色免费网站在线观看 | 亚洲伦乱视频 | 水密桃av | 亚洲精品久久 | 在线观看中文字幕亚洲 | 亚洲精品视频播放 | 国产高清一区二区 | 成人黄大片视频在线观看 | 九九精品视频在线观看 | av中文字幕在线观看 | 精品国产91乱码一区二区三区 | 国产情侣av自拍 | 视频一区二区三区在线播放 | 一色视频 | 在线观看一区二区精品 | 成人免费在线播放 | 久久精品日产第一区二区三区 | 日韩综合一区二区 | 黄色片在线看 | 欧美午夜一区二区三区免费大片 | 激情婷婷丁香 | 欧美v片| 日韩一区二区三区电影在线观看 | 午夜网址 | 精品视频一区二区三区四区 | 亚洲 自拍 另类 欧美 丝袜 | 成人在线视频免费观看 | 国产精品夜间视频香蕉 | 免费观看一级特黄欧美大片 | 在线亚洲欧美 |