国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|

服務(wù)器之家 - 編程語言 - JAVA教程 - Java進(jìn)階:用匿名內(nèi)部類實(shí)現(xiàn) Java 同步回調(diào)

Java進(jìn)階:用匿名內(nèi)部類實(shí)現(xiàn) Java 同步回調(diào)

2020-10-30 00:16小z同學(xué) JAVA教程

在一個應(yīng)用系統(tǒng)中,不論使用何種編程語言,模塊之間要進(jìn)行調(diào)用,僅存在三種方式:同步調(diào)用、異步調(diào)用、回調(diào)。本文就其中回調(diào)方式進(jìn)行詳細(xì)解讀,并通過匿名內(nèi)部類的手段,在最后實(shí)現(xiàn)一個同步回調(diào)的過程。

在一個應(yīng)用系統(tǒng)中,不論使用何種編程語言,模塊之間要進(jìn)行調(diào)用,僅存在三種方式:同步調(diào)用、異步調(diào)用、回調(diào)。本文就其中回調(diào)方式進(jìn)行詳細(xì)解讀,并通過匿名內(nèi)部類的手段,在最后實(shí)現(xiàn)一個同步回調(diào)的過程。

Java進(jìn)階:用匿名內(nèi)部類實(shí)現(xiàn) Java 同步回調(diào)

一、回調(diào)的意義

在學(xué)習(xí)回調(diào)之前,我們需要知道使用回調(diào)的原因,和回調(diào)的應(yīng)用場景。

不如先思考兩個問題:

  • 棧底對棧頂通常是不可見的,但是棧頂有時需要直接調(diào)用棧底
  • 上級派下級做事,在此期間,下級可能需要通過上級獲取高權(quán)限的協(xié)助

而在本例中,回調(diào)方式被用來處理爬取后的大量返回?cái)?shù)據(jù)。在業(yè)務(wù)層面,這些數(shù)據(jù)被安排在調(diào)用方進(jìn)行處理,但是調(diào)用方卻沒有處理這些數(shù)據(jù)的足夠權(quán)限。于是,通過回調(diào),業(yè)務(wù)被很好的分層并且執(zhí)行。

二、如何實(shí)現(xiàn)同步回調(diào)

本文對同步回調(diào)的業(yè)務(wù)需求如下:

  • 回調(diào)方調(diào)用調(diào)用方進(jìn)行數(shù)據(jù)爬取
  • 調(diào)用方調(diào)用回調(diào)方進(jìn)行數(shù)據(jù)存儲
  • 調(diào)用方調(diào)用回調(diào)方進(jìn)行日志記錄

根據(jù)需求可以得到回調(diào)過程的時序圖:

Java進(jìn)階:用匿名內(nèi)部類實(shí)現(xiàn) Java 同步回調(diào)

相應(yīng)代碼如下:

public interface Handler { 

    void handle(String info); 

 

public class Task { 

    private String info; 

 

    private void setInfo(String info) { 

        this.info = info; 

    } 

 

    public void call() { 

        Crawler.getInstance().crawl(new Handler() { 

            @Override 

            public void handle(String info) { 

                setInfo(info); 

            } 

        }); 

    } 

 

public class Crawler { 

    private static Crawler instance = null

 

    public static Crawler getInstance() { 

        if (instance == null) { 

            instance = new Crawler(); 

        } 

        return instance; 

    } 

 

    private String getInfo() { 

        return "the info from crawler"; 

    } 

 

    public void crawl(Handler handler) { 

        handler.handle(getInfo()); 

    } 

三、遇到的問題

如果我們使用代碼來實(shí)現(xiàn)上述回調(diào)過程,不難會發(fā)現(xiàn)這樣一個問題:Task調(diào)用Crawler,Crawler調(diào)用Handler,Hanlder調(diào)用Task。很明顯,此處存在一個環(huán),產(chǎn)生了循環(huán)依賴的問題,而接口可以為我們提供良好的解決方案。

Java進(jìn)階:用匿名內(nèi)部類實(shí)現(xiàn) Java 同步回調(diào)

四、為什么通過匿名內(nèi)部類的方式

Java 實(shí)現(xiàn)同步回調(diào)有許多方式,為什么我們要通過匿名內(nèi)部類的方式來實(shí)現(xiàn)回調(diào),直接回調(diào)不香嗎?

不妨先看看直接回調(diào)的順序圖:

Java進(jìn)階:用匿名內(nèi)部類實(shí)現(xiàn) Java 同步回調(diào)

相應(yīng)代碼如下:

public interface Handler { 

    void handle(String info); 

 

public class Task implements Handler{ 

    private String info; 

 

    private void setInfo(String info) { 

        this.info = info; 

    } 

 

    public void call() { 

        Crawler.getInstance().crawl(this); 

    } 

 

    @Override 

    public void handle(String info) { 

        setInfo(info); 

    } 

 

public class Crawler { 

    private static Crawler instance = null

 

    public static Crawler getInstance() { 

        if (instance == null) { 

            instance = new Crawler(); 

        } 

        return instance; 

    } 

 

    private String getInfo() { 

        return "the info from crawler"; 

    } 

 

    public void crawl(Handler handler) { 

        handler.handle(getInfo()); 

    } 

直接回調(diào)帶來的最大問題便是回調(diào)接口的暴露,也就是說回調(diào)接口不一定用于回調(diào),也可以用于直接訪問。這在業(yè)務(wù)層面的設(shè)計(jì)上是絕對不允許的,而匿名內(nèi)部類在執(zhí)行回調(diào)等特定業(yè)務(wù)的同時,可以很好的對外隱藏用于回調(diào)的接口。

五、總結(jié)

  • 常規(guī)類不保證接口安全性:常規(guī)接口通常可以設(shè)定權(quán)限,但不可以指定訪問類,也就是說要么都可以訪問,要么都拒絕訪問。而內(nèi)部類中接口可以指定訪問類。
  • 內(nèi)部類保證接口安全性:內(nèi)部類接口通常是對外隱藏的,那么如何使得內(nèi)部類對指定訪問類暴露呢?方法很簡單,只需要通過外部類實(shí)例化內(nèi)部類,并對指定類傳參,便可以使得指定類對內(nèi)部類可訪問。
  • 內(nèi)部類的安全性加上其對外部類的完全權(quán)限,這使得其成為實(shí)現(xiàn)回調(diào)的首選方案。在JAVA8中,lambda表達(dá)式本質(zhì)上就是匿名內(nèi)部類的語法糖。

注:匿名內(nèi)部類本質(zhì)上是成員內(nèi)部類、局部內(nèi)部類的簡化寫法,這里將其統(tǒng)稱為內(nèi)部類。

原文地址:https://www.cnblogs.com/zzzz76/p/13889869.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 男女激情网站 | 日本淫片| 国产999精品久久久久久 | 日韩精品一区二区三区中文 | 久久99久久99| 国产精品久久久精品 | 一级毛片免费看 | 天天影视色香欲 | 在线欧美亚洲 | 求av网址 | 在线国产视频观看 | 国产欧美日韩综合精品一区二区 | 久久久国产一区二区 | 欧美亚洲视频在线观看 | 美女爽到呻吟久久久久 | 国产成人一区二区三区 | 夜夜草视频 | 毛片一级av | 欧美一级二级三级 | 国产日产久久高清欧美一区 | 91综合在线观看 | 日韩午夜影院 | 国产成人在线视频 | 精品视频在线免费观看 | 久久久久久久av | 欧美一级免费看 | 日本成人网址 | 欧美精品一区二 | 亚洲无线看| 成人在线播放网站 | 亚洲国产精品一区 | 99黄色片| 久久精品超碰 | 黄色片视频在线观看 | 91精品一区二区三区久久久久久 | 免费成人在线网站 | 精品久久一区二区三区 | 国产伦精品一区二区三区四区视频 | 久久精品一区二区三区四区 | 久久综合九色综合欧美狠狠 | 久久久久久九九九 |