成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java進階:用匿名內部類實現 Java 同步回調

開發 后端
在一個應用系統中,不論使用何種編程語言,模塊之間要進行調用,僅存在三種方式:同步調用、異步調用、回調。本文就其中回調方式進行詳細解讀,并通過匿名內部類的手段,在最后實現一個同步回調的過程。

在一個應用系統中,不論使用何種編程語言,模塊之間要進行調用,僅存在三種方式:同步調用、異步調用、回調。本文就其中回調方式進行詳細解讀,并通過匿名內部類的手段,在最后實現一個同步回調的過程。

[[349149]]

一、回調的意義

在學習回調之前,我們需要知道使用回調的原因,和回調的應用場景。

不如先思考兩個問題:

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

而在本例中,回調方式被用來處理爬取后的大量返回數據。在業務層面,這些數據被安排在調用方進行處理,但是調用方卻沒有處理這些數據的足夠權限。于是,通過回調,業務被很好的分層并且執行。

二、如何實現同步回調

本文對同步回調的業務需求如下:

  • 回調方調用調用方進行數據爬取
  • 調用方調用回調方進行數據存儲
  • 調用方調用回調方進行日志記錄

根據需求可以得到回調過程的時序圖:

相應代碼如下:

  1. public interface Handler { 
  2.     void handle(String info); 
  3.  
  4. public class Task { 
  5.     private String info; 
  6.  
  7.     private void setInfo(String info) { 
  8.         this.info = info; 
  9.     } 
  10.  
  11.     public void call() { 
  12.         Crawler.getInstance().crawl(new Handler() { 
  13.             @Override 
  14.             public void handle(String info) { 
  15.                 setInfo(info); 
  16.             } 
  17.         }); 
  18.     } 
  19.  
  20. public class Crawler { 
  21.     private static Crawler instance = null
  22.  
  23.     public static Crawler getInstance() { 
  24.         if (instance == null) { 
  25.             instance = new Crawler(); 
  26.         } 
  27.         return instance; 
  28.     } 
  29.  
  30.     private String getInfo() { 
  31.         return "the info from crawler"; 
  32.     } 
  33.  
  34.     public void crawl(Handler handler) { 
  35.         handler.handle(getInfo()); 
  36.     } 

三、遇到的問題

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

四、為什么通過匿名內部類的方式

用 Java 實現同步回調有許多方式,為什么我們要通過匿名內部類的方式來實現回調,直接回調不香嗎?

不妨先看看直接回調的順序圖:

相應代碼如下:

  1. public interface Handler { 
  2.     void handle(String info); 
  3.  
  4. public class Task implements Handler{ 
  5.     private String info; 
  6.  
  7.     private void setInfo(String info) { 
  8.         this.info = info; 
  9.     } 
  10.  
  11.     public void call() { 
  12.         Crawler.getInstance().crawl(this); 
  13.     } 
  14.  
  15.     @Override 
  16.     public void handle(String info) { 
  17.         setInfo(info); 
  18.     } 
  19.  
  20. public class Crawler { 
  21.     private static Crawler instance = null
  22.  
  23.     public static Crawler getInstance() { 
  24.         if (instance == null) { 
  25.             instance = new Crawler(); 
  26.         } 
  27.         return instance; 
  28.     } 
  29.  
  30.     private String getInfo() { 
  31.         return "the info from crawler"; 
  32.     } 
  33.  
  34.     public void crawl(Handler handler) { 
  35.         handler.handle(getInfo()); 
  36.     } 

直接回調帶來的最大問題便是回調接口的暴露,也就是說回調接口不一定用于回調,也可以用于直接訪問。這在業務層面的設計上是絕對不允許的,而匿名內部類在執行回調等特定業務的同時,可以很好的對外隱藏用于回調的接口。

五、總結

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

注:匿名內部類本質上是成員內部類、局部內部類的簡化寫法,這里將其統稱為內部類。

 

責任編輯:趙寧寧 來源: 小z同學
相關推薦

2020-01-15 11:14:21

Java算法排序

2023-10-19 13:24:00

Java工具

2011-03-29 14:11:15

內部類

2020-12-14 10:23:23

Java內部類外部類

2009-06-11 13:08:29

Java內部類Java編程思想

2021-02-08 08:45:18

Java內部類Object類

2023-03-06 07:53:36

JavaN種內部類

2011-07-21 15:44:33

Java內部類

2019-12-23 14:32:38

Java內部類代碼

2009-07-29 09:18:49

Java內部類

2012-04-17 11:21:50

Java

2020-09-21 07:00:42

Java內部類接口

2015-12-08 09:05:41

Java內部類

2012-02-01 10:33:59

Java

2020-01-12 19:10:30

Java程序員數據

2015-10-26 09:25:42

2010-02-05 15:32:33

Java內部類

2025-06-11 08:00:00

LambdaPython函數

2009-08-18 10:34:31

Java入門基本概念

2009-08-19 17:10:09

C#回調函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91亚洲国产亚洲国产 | 涩涩视频网 | 亚洲国产精品久久久 | 日日av| 日韩中文字幕第一页 | 久草成人 | 免费能直接在线观看黄的视频 | 亚洲精品久久久久中文字幕二区 | 怡红院成人在线视频 | 国产日韩欧美在线 | 国产91在线精品 | 亚洲精品观看 | 天天射中文| 亚洲黄色网址视频 | 亚洲视频在线播放 | 337p日本欧洲亚洲大胆鲁鲁 | 日本精品视频在线观看 | 91 中文字幕| 国产欧美日韩综合精品一 | 热99视频| 久久人操 | 91精品国产91 | 欧美亚洲国产日韩 | 亚洲综合色丁香婷婷六月图片 | 欧美成人激情 | 久久一区精品 | 三级黄片毛片 | 成人在线精品视频 | 日本又色又爽又黄又高潮 | 午夜看片 | 欧美一区二区三区免费电影 | 精品久久久久香蕉网 | 久久久区 | 91精品国产乱码久久久久久久久 | 欧美日韩一区二区在线观看 | av在线播放网址 | 亚洲九九精品 | 综合九九 | 99精品一区二区三区 | 欧美日日日日bbbbb视频 | 国产高清在线精品一区二区三区 |