Java回調

回調是Java非常經典的用法,體現了Java的多態和動態綁定,回調指的是接口的回調(有很多概念被學過的人簡化的稱呼,給初學者帶來困惑,真是傷不起)。

網上關於回調的文章一大推,說法也很多,比如:

A對象調用了自己的方法a,方法a接收的參數是B接口的實例b,而在方法a中將執行接口B中的方法c。

對於初學者來說,理解起來非常困難,學習的樂趣也沒了。

在這先舉個簡單的例子(參考了知乎某位朋友的例子,想到好例子好難),大家看完例子再來理解就好了。

背景:在學校旁邊有家奶茶店,裏面有個服務員Lucy,奶茶店有奶茶、白開水、碧螺春等飲料提供。經常光顧奶茶店的有三類人,學生,老師還有在學校打工的工人。

學生最喜歡和奶茶,老師喜歡和碧螺春,工人因爲比較累,喜歡和白開水,雖然喜好不同,但他們三種人去奶茶店都是去實現自己的需要的服務的。

於是coding如下代碼:

interface NeedService{
     public void server();
}

class Student implements NeedService{
      @Override
      public void server() {
           System. out.println( "招待我喝奶茶" );
     }
}

class Teacher implements NeedService{
      @Override
      public void server() {
           System. out.println( "招待我喝碧螺春" );
     }
}

class Worker implements NeedService{
      @Override
      public void server() {
           System. out.println( "招待我喝白開水" );
     }
}

服務員Lucy雖然比較漂亮,但是也比較笨,雖然她知道三種人都需要服務,但是她得等三種人說出自己的需求才知道給三種人上什麼飲料。

抽象到代碼就是服務員只能傳入需要服務的接口NeedService(就是在這裏,接口回調),再調用NeedServiceserver()方法,她能做的就是這個。

public class Waiter {
     
      //此處回調接口
      void provideService(NeedService needService){
           needService.server();
     }

}

這時候回調就派上用場了,只要三種人實現了各自的server()方法(重寫),就可以完美的解決這個問題了。

於是coding如下代碼:

public class Waiter {
     
     //此處回調接口
     void provideService(NeedService needService){
           needService.server();
     }
     
     public static void main(String[] args) {
            // TODO Auto-generated method stub
           Waiter waiterLucy = new Waiter();
           waiterLucy.provideService( new Student());
           waiterLucy.provideService( new Teacher());
           waiterLucy.provideService( new Worker());
           
     }

}

結果:



最後,分析下接口的寫法,必須有重寫和接口才能實現,看懂了這個例子,網上的概念看不看就無所謂了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章