最近一直在看Java的相關(guān)東西,因?yàn)槲覀冊(cè)趇OS開(kāi)發(fā)是,無(wú)論是Objective-C還是Swift中,經(jīng)常會(huì)用到委托代理回調(diào),以及Block回調(diào)或者說(shuō)是閉包回調(diào)。接下來(lái)我們就來(lái)看看Java語(yǔ)言中是如何實(shí)現(xiàn)委托代理回調(diào)以及閉包回調(diào)的。當(dāng)然這兩個(gè)技術(shù)點(diǎn)雖然實(shí)現(xiàn)起來(lái)并不困難,但是,這回調(diào)在封裝一些公用組件時(shí)還是特別有用的。所以今天,還是有必要把Java中的委托代理回調(diào)以及閉包回調(diào)來(lái)單獨(dú)的拿出來(lái)聊一下。
成都創(chuàng)新互聯(lián)公司總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有網(wǎng)站制作、成都網(wǎng)站制作、網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站維護(hù)、公眾號(hào)搭建、重慶小程序開(kāi)發(fā)公司、軟件開(kāi)發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動(dòng)行銷(xiāo)領(lǐng)域創(chuàng)造價(jià)值而不懈努力!本篇博客我們依然依托于實(shí)例,先聊聊委托代理回調(diào)的實(shí)現(xiàn)和使用場(chǎng)景,然后再聊一下使用匿名內(nèi)部類(lèi)來(lái)進(jìn)行回調(diào),其實(shí)就是我們常說(shuō)的“閉包”回調(diào)。閉包回調(diào)的實(shí)現(xiàn)方式其實(shí)就是匿名內(nèi)部類(lèi)的使用。既然本篇博客我們使用到了匿名內(nèi)部類(lèi),我們就再聊一下Java中的內(nèi)部類(lèi)的相關(guān)東西。
一、委托代理回調(diào)
在iOS開(kāi)發(fā)中,我們經(jīng)常使用到委托代理回調(diào),想TableView、CollectionView等等,這些高級(jí)控件會(huì)依賴于委托回調(diào)來(lái)完成一些配置。當(dāng)然在Java中委托代理回調(diào)也是非常有用的,接下來(lái)我們就來(lái)看一下Java中的委托代理回調(diào)。當(dāng)然在Swift或者OC中的委托代理回調(diào)是依托于“協(xié)議”的,Swift或者OC中的“協(xié)議”其實(shí)就是Java語(yǔ)言中的“接口”。所以在Java中的委托代理回調(diào),依然要依托于“接口”來(lái)實(shí)現(xiàn)。
1、類(lèi)圖
首先我們給出該部分實(shí)例的類(lèi)圖,然后我們根據(jù)下方的類(lèi)圖來(lái)設(shè)計(jì)實(shí)現(xiàn)我們的具體代碼。下方就是本部分所設(shè)計(jì)Demo的類(lèi)圖,當(dāng)然,從類(lèi)圖中我們也能直觀的看到,該示例是比較簡(jiǎn)單的,一共也就是一個(gè)接口兩個(gè)類(lèi)。CustomDelegate這個(gè)接口是代理類(lèi)要實(shí)現(xiàn)的接口,其中包含了代理類(lèi)要實(shí)現(xiàn)的方法。
從下方的類(lèi)圖中我們可以看出,代理類(lèi)FirstClass實(shí)現(xiàn)了CustomDelegate代理接口,并實(shí)現(xiàn)了相關(guān)的代理方法。而SecondClass依賴于CustomDelegate接口,也就是說(shuō)只要是實(shí)現(xiàn)了CustomDelegate接口的類(lèi)都可以作為SecondClass的代理。而FirstClass中含有SecondClass類(lèi)型的屬性,并且FirstClass又實(shí)現(xiàn)了CustomDelegate接口,在FirstClass中,我們將secondClass對(duì)象的代理類(lèi)指定為FirstClass,稍后我們?cè)诰唧w實(shí)現(xiàn)時(shí)將會(huì)介紹到。
2、代碼的具體實(shí)現(xiàn)
根據(jù)上述類(lèi)圖,我們很容易的就可以給出相應(yīng)的代碼實(shí)現(xiàn)。接下來(lái)我們就根據(jù)上述類(lèi)圖來(lái)給出具體的代碼實(shí)現(xiàn)。
(1)、CustomDelegate的代碼實(shí)現(xiàn)
下方代碼段就是CustomDelegate的具體實(shí)現(xiàn)。當(dāng)然該接口的實(shí)現(xiàn)比較簡(jiǎn)單,就一個(gè)setValue(String value)方法。該方法的具體作用是用來(lái)相應(yīng)參數(shù)回調(diào)的。下方我們會(huì)用到該方法。
package com.zeluli.callback.delegate; public interface CustomDelegate { public void setValue(String value); }