最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java與Android使用監(jiān)聽者模式示例

 更新時間:2022年08月16日 09:52:35   作者:rustfisher  
這篇文章主要為大家介紹了Java與Android使用監(jiān)聽者模式示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

監(jiān)聽者模式(觀察者模式)能降低對象之間耦合程度。為兩個相互依賴調(diào)用的類進(jìn)行解耦。

便于進(jìn)行模塊化開發(fā)工作。不同模塊的開發(fā)者可以專注于自身的代碼。

監(jiān)聽者用來監(jiān)聽自已感興趣的事件,當(dāng)收到自已感興趣的事件時執(zhí)行自定義的操作。
在某些數(shù)據(jù)變化時,其他的類做出一些響應(yīng)。處理數(shù)據(jù)(或者分發(fā)事件)的類主動投送消息,感興趣的類主動“訂閱”消息。

監(jiān)聽者模式在Android中有大量的運(yùn)用,相信大家都不會感到陌生。在Android開發(fā)中,Button控件的點(diǎn)擊事件就是監(jiān)聽者模式最常見的例子。

當(dāng)Button被點(diǎn)擊,執(zhí)行了 OnClickListener.onClick。 Activity中給這個Button設(shè)置了自己實(shí)現(xiàn)的OnClickListener,并復(fù)寫了onClick方法,就能執(zhí)行自定義操作了。

Java代碼實(shí)例

下面來用Java來實(shí)現(xiàn)監(jiān)聽者模式。
這個例子是給“計(jì)算類”持續(xù)地傳入數(shù)據(jù),處理好數(shù)據(jù)后,發(fā)出結(jié)果。感興趣的類接收結(jié)果。
2個文件:AlgoCalculator.java;MainUser.java

  • AlgoCalculator.java是計(jì)算部分,接收數(shù)據(jù)并進(jìn)行計(jì)算。并將結(jié)果傳遞出去。
  • MainUser.java是調(diào)用方,將基本數(shù)據(jù)傳入AlgoCalculator并監(jiān)聽結(jié)果。
package com.algo;
import java.util.LinkedList;
import java.util.List;
public class AlgoCalculator {
    private List<short[]> mDataBuffer = new LinkedList<>();
    public AlgoCalculator() {
    }
    // 定義一個Listener接口;可將一個boolean值傳遞出去
    public interface ResultChangeListener {
        void onChange(boolean found);
    }
    private ResultChangeListener resultChangeListener;
    // 調(diào)用方能夠設(shè)置并實(shí)現(xiàn)這個接口
    public void setResultChangedListener(ResultChangeListener resultChangedListener) {
        this.resultChangeListener = resultChangedListener;
    }
    // 傳輸數(shù)據(jù)
    public void setDataStream(short[] data) {
        checkData(data);// 處理數(shù)據(jù)方法
    }
    // 處理數(shù)據(jù),并送出結(jié)果
    private void checkData(short[] data) {
        if (data.length == 0) {
            return;
        }
        long sum = 0;
        for (short b : data) {
            sum += b;
        }
        if (sum > 40) {
            resultChangeListener.onChange(true); // 數(shù)據(jù)處理結(jié)果
        } else {
            resultChangeListener.onChange(false);
        }
    }
}

主程序;調(diào)用方傳入數(shù)據(jù),獲取結(jié)果

import com.algo.AlgoCalculator;
public class MainUser {
    public static void main(String[] args) {
        AlgoCalculator algoCalculator = new AlgoCalculator(); // 初始化
        // 設(shè)置監(jiān)聽器,并在里面增加要執(zhí)行的動作
        algoCalculator.setResultChangedListener(new AlgoCalculator.ResultChangeListener() {
            @Override
            public void onChange(boolean found) {
                System.out.println("result: " + found);
            }
        });
        short[] data1 = {1, 2, 3,};
        short[] data2 = {10, 20, 30};
        short[] data3 = {6, 7, 8};
        short[] data4 = {1, 1, 1};
        // 傳入數(shù)據(jù)
        algoCalculator.setDataStream(data1);    // output false
        algoCalculator.setDataStream(data2);    // output true
        algoCalculator.setDataStream(data3);    // output false
        algoCalculator.setDataStream(data4);    // output false
    }
}

在另外的類里,能夠很方便地調(diào)用AlgoCalculator的計(jì)算能力并獲取計(jì)算結(jié)果。 在這里,每傳入一次數(shù)據(jù),就能獲取一個結(jié)果。如果每秒鐘傳入一次數(shù)據(jù),每秒鐘就能獲取一個結(jié)果。 我們可以把復(fù)雜的算法封裝起來,客戶端只需要傳入數(shù)據(jù),即可獲得(監(jiān)聽到)結(jié)果。

很多場景中都使用了監(jiān)聽者模式。開發(fā)者也可能在不知不覺中就運(yùn)用了這個模式。

Android中使用監(jiān)聽器

最常見的例子是給Button設(shè)置點(diǎn)擊事件監(jiān)聽器。 類似上個例子,設(shè)計(jì)一個接口當(dāng)做監(jiān)聽器。Android中回調(diào)時可以利用handler,控制調(diào)用的線程。

private Handler mMainHandler;
mMainHandler = new Handler(Looper.getMainLooper());// 在主線程中運(yùn)行
private void notifySthChange(final int state) {
    mMainHandler.post(new Runnable() {
        @Override
        public void run() {
            ArrayList<SListener> list = new ArrayList<>(mListeners);
            for (SListener l : list) {
                l.OnSthChanged(state);
            }
        }
    });
}

在回調(diào)中可以直接更新UI。

以上就是Java與Android使用監(jiān)聽者模式示例的詳細(xì)內(nèi)容,更多關(guān)于Java Android監(jiān)聽者模式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

莎车县| 安顺市| 清河县| 永康市| 刚察县| 徐闻县| 建德市| 庆安县| 四子王旗| 东阿县| 来安县| 清河县| 沐川县| 鄄城县| 合江县| 景东| 唐河县| 会宁县| 高淳县| 成都市| 正镶白旗| 炎陵县| 邓州市| 永宁县| 成安县| 阜平县| 白河县| 石家庄市| 开封县| 荣成市| 桐柏县| 鄢陵县| 沈阳市| 专栏| 无锡市| 婺源县| 安化县| 凤阳县| 泸定县| 绥芬河市| 邮箱|