欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

design principle:java 回調(diào)與委派/委托機(jī)制

系統(tǒng) 2310 0

design principle:java 回調(diào)與委派/委托機(jī)制

原文地址: http://blog.csdn.net/AndroidBluetooth/article/details/6937468

博客? design principle:模擬 android Button 控件點(diǎn)擊事件?? ?主要說了一下模擬 android 的 Listener 模式,其實(shí)這就是一種委派與回調(diào)機(jī)制的體現(xiàn)。

委派,也可以叫做委托,從字面上來理解的話,應(yīng)該是委托其他類做事情而自己不做或者只做一部分工作;而回調(diào),就是調(diào)用自己的方法。

在 java 中,這兩種機(jī)制很類似,你姑且可以認(rèn)為它們就是一碼事。

推薦一篇博文給大家:? Java中委托事件模型 ?

java 中,實(shí)現(xiàn)委派和回調(diào)都是通過接口來實(shí)現(xiàn)的。下面舉個(gè)小例子吧!

該例子是這樣的(只是一個(gè)例子):

ProfessionalWorker 、SparetimeWorker 負(fù)責(zé)發(fā)射 Rocket,Rocket 類通過接口 IRocketDelegate 委派(或者說是回調(diào))?ProfessionalWorker 、SparetimeWorker自己發(fā)射。

總之,Rocket不做具體的事情。看實(shí)例代碼:

IRocketDelegate.java源碼?

      
         1
      
      
        package
      
       mark.zhang;
      
2
3 public interface IRocketDelegate {
4
5 public abstract long startAtTime();
6
7 public abstract long endAtTime();
8
9 public abstract void sendDidFail();
10 }

共有三個(gè)方法,分別是用于計(jì)算 Rocket 發(fā)射時(shí)間、計(jì)算 Rocket 發(fā)射完畢的時(shí)間以及發(fā)送是否失敗的。

Rocket.java源碼

?

      
         1
      
      
        package
      
       mark.zhang;
      
2
3 public class Rocket {
4
5 IRocketDelegate delegate = null ;
6
7 public Rocket(IRocketDelegate delegate) {
8 this .delegate = delegate;
9 }
10
11 private long getRocketStartTime() {
12 long startTime = delegate.startAtTime();
13 return startTime;
14 }
15
16 private long getRocketEndTime() {
17 long endTime = delegate.endAtTime();
18 return endTime;
19 }
20
21 public boolean isOk() {
22 // 超時(shí)0.1秒為失敗
23 if (getRocketEndTime() - getRocketStartTime() >= 100) {
24 delegate.sendDidFail();
25 return false ;
26 }
27 return true ;
28 }
29
30 }

在這個(gè)類中,聲明一個(gè) IRocketDelegate 接口對(duì)象,使用該對(duì)象調(diào)用接口的方法。我們知道,接口不可以直接實(shí)例化,換句話說,實(shí)例化接口必須實(shí)現(xiàn)接口的所有方法。

那么,我們就把這些實(shí)現(xiàn)工作交給具體的發(fā)射者來完成。實(shí)現(xiàn)回調(diào)。

ProfessionalWorker.java源碼

      
         1
      
      
        package
      
       mark.zhang;
      
2
3 public class ProfessionalWorker implements IRocketDelegate {
4
5 @Override
6 public long startAtTime() {
7 System.out.println("startAtTime is call-back inProfessionalWorker!");
8 return System.currentTimeMillis();
9 }
10
11 @Override
12 public long endAtTime() {
13 System.out.println("endAtTime is call-back in ProfessionalWorker!");
14 return System.currentTimeMillis();
15 }
16
17 @Override
18 public void sendDidFail() {
19 System.out.println("ProfessionalWorker send Rocket fail !");
20 }
21
22 public void send() {
23 if ( new Rocket( this ).isOk()) {
24 System.out.println("ProfessionalWorker send Rocket ok !");
25 }
26 }
27 }

SparetimeWorker.java源碼

            
               1
            
            
              package
            
             mark.zhang;
            
2
3 public class SparetimeWorker {
4 public void send() {
5 boolean isOk = new Rocket( new IRocketDelegate() {
6
7 @Override
8 public long startAtTime() {
9 System.out.println("startAtTime is call-back in SparetimeWorker !");
10 return System.currentTimeMillis();
11 }
12
13 @Override
14 public long endAtTime() {
15 System.out.println("endAtTime is call-back in SparetimeWorker!");
16 return System.currentTimeMillis() + 100L;
17 }
18
19 @Override
20 public void sendDidFail() {
21 System.out.println("SparetimeWorker send Rocket fail !");
22 }
23 }).isOk();
24
25 if (isOk) {
26 System.out.println("SparetimeWorker send Rocket ok !");
27 }
28 }
29 }

這個(gè)類采用內(nèi)部類的方式完成。

Test.java

      
         1
      
      
        package
      
       mark.zhang;
      
2
3 public class Test {
4
5 public static void main(String[] args) {
6 new ProfessionalWorker().send();
7
8 System.out.println("*********************************************");
9
10 new SparetimeWorker().send();
11 }
12 }

顯示結(jié)果

      
        1
      
       endAtTime is call-back in ProfessionalWorker!
      
2 startAtTime is call-back inProfessionalWorker!
3 ProfessionalWorker send Rocket ok !
4 *********************************************
5 endAtTime is call-back in SparetimeWorker!
6 startAtTime is call-back in SparetimeWorker !
7 SparetimeWorker send Rocket fail !

這就體現(xiàn) Java 中的一句話?Don't call me,I'll call you. 其含義就是回調(diào)(或者委派/委托)。

android 中很多這樣的用法,關(guān)于接口的好處還有很多,后續(xù)慢慢研究,記住一句話:面向?qū)ο竺嫦蚪涌诰幊獭?

design principle:java 回調(diào)與委派/委托機(jī)制


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 五月天播播网 | 日韩在线一区二区三区 | 久久99精品久久久久久 | 国产精品久久久久aaaa九色 | 亚洲欧美成人中文在线网站 | 色秀视频在线观看全部 | 中文字幕精品视频 | 天天舔| 久操青青 | 无名者电影在线完整版免费 | 久久精品91久久久久久再现 | 欧美在线看 | 99久久精品国产一区二区三区 | 欧美伦交| 粉嫩粉嫩一区二区三区在线播放 | 草久在线观看视频 | 一区二区三区日韩视频在线观看 | 红杏网站永久免费视频入口 | 国产欧美一区二区三区免费看 | 成人福利视频在线看高清观看 | 日本精品在线 | 91久久精品一区二区二区 | 欧美精选在线 | 日韩黄色大全 | 久久美女视频 | 久久久久国产精品一区 | 成人免费播放视频777777 | 影音av| 日本午夜精品一区二区三区电影 | 亚洲 欧美 日韩中文字幕一区二区 | 国产一级黄色网 | 欧美精品久久一区 | 色综合天天综合网国产成人 | www伊人| 网站午夜 | 成人黄页在线观看 | 欧美日韩综合精品一区二区三区 | 日韩欧美大片 | 欧美日韩在线第一页 | 成人激情视频在线观看 | 国产精品爽爽va在线观看网站 |