欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的functor實現(xiàn)

 更新時間:2006年12月23日 00:00:00   作者:  
文章來源:csdn 作者:wangfengsdu

  經(jīng)常聽到回調(diào)函數(shù)(callback function)這個概念, 所謂回調(diào)函數(shù),就是指這個函數(shù)先在某處注冊,而它將在稍后某個需要的時候被調(diào)用。比如在利用SDK 進(jìn)行Windows編程的時候,我們需要注冊一個WNDCLASS類,這個類中有這樣一個參數(shù) lpfnWndProc, 要進(jìn)行消息處理,我們就要用處理消息的函數(shù)的指針給它賦值。消息處理函數(shù)什么時候被調(diào)用的?我們沒有顯式地在程序中看到啊。是OS調(diào)用的。  這是SDK的試驗方式,當(dāng)然用的是過程式的語言C,可以通過傳遞函數(shù)的指針實現(xiàn)。

   C++中怎么來實現(xiàn)呢?當(dāng)然,C++兼容C,用函數(shù)指針就可以。  同時C++又提供了面向?qū)ο蟮臋C(jī)制,可不可以有不同的實現(xiàn)機(jī)制呢?  當(dāng)然! STL 中的functor(Function object)就可以用到回調(diào)上。  比如對一個存放int數(shù)據(jù)的vector進(jìn)行遞減排序的話,我們可以這樣進(jìn)行。

  sort(vec.begin(),vec.end(),greater<int>());
   greater<int>()
  
   就是我們傳遞的一個匿名對象,它重載了函數(shù)調(diào)用運(yùn)算符“()”。我們沒有顯式地調(diào)用這個對象里面提供的函數(shù),sort函數(shù)對對象里面的函數(shù)進(jìn)行call back。

  Java中要實現(xiàn)類似functor的功能,應(yīng)該怎么辦呢?Command模式可以幫上忙。Command模式看起來很簡單,只要把command封裝到一個接口中就可以。Command模式是回調(diào)機(jī)制的一個面向?qū)ο蟮奶娲贰?/p>

  比如 java.io 中已經(jīng)定義好的一個接口

      public interface FilenameFilter {
          boolean accept(File dir, String name);
       }

  這個FilenameFilter就是Command,實現(xiàn)Command的類就是ConcreteCommand。這個接口所聲明的操作 "accept" 就是看看目錄dir中的文件name是否滿足某種要求,如果滿足就返回true,否則就返回false。這個要求是什么呢?你要對這個接口進(jìn)行實現(xiàn)。比如我想看看這個文件的名稱包含不包含指定的字符串,那么就可以定義下面的類:
   class DirFilter implements FilenameFilter {
        private String afn;
        public DirFilter(String afn){
            this.afn = afn;
        }  
        public boolean accept(File dir, String name){
            String f = new File(name).getName();
            return f.indexOf(afn) != -1;
        }
    }

   怎么樣使用它呢?File類中有這樣一個方法
      public String[] list(FilenameFilter filter)

  因此,我們就可以這樣做了:
      File file = new File(".");
      String[] list = file.list(new DirFilter("wf"));

  得到的list就是一個當(dāng)然目錄中所有包含字符串"wf"的文件名稱的字符串?dāng)?shù)組。怎么樣,看起來是不是和C++中的functor差不多呢?

相關(guān)文章

  • Java實現(xiàn)二維碼功能的實例代碼

    Java實現(xiàn)二維碼功能的實例代碼

    今天這篇文章,主要是利用Java實現(xiàn)二維碼功能,本文思路清晰,需要的朋友參考下
    2017-02-02
  • 淺談Java中Collection和Collections的區(qū)別

    淺談Java中Collection和Collections的區(qū)別

    下面小編就為大家?guī)硪黄獪\談Java中Collection和Collections的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • springboot-assembly自定義打包全過程

    springboot-assembly自定義打包全過程

    這篇文章主要介紹了springboot-assembly自定義打包全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 淺談Java中真的只有值傳遞么

    淺談Java中真的只有值傳遞么

    這篇文章主要介紹了淺談Java中真的只有值傳遞么?文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 你可知HashMap為什么是線程不安全的

    你可知HashMap為什么是線程不安全的

    這篇文章主要介紹了你可知HashMap為什么是線程不安全的,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 實例講解Java并發(fā)編程之變量

    實例講解Java并發(fā)編程之變量

    這篇文章主要介紹了實例講解Java并發(fā)編程之變量,本文講解了編寫線程安全需要關(guān)心的共享變量和可變變量,需要的朋友可以參考下
    2015-04-04
  • Java實現(xiàn)堆排序(大根堆)的示例代碼

    Java實現(xiàn)堆排序(大根堆)的示例代碼

    這篇文章主要介紹了Java實現(xiàn)堆排序(大根堆)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • SpringMvc請求處理參數(shù)?和?響應(yīng)數(shù)據(jù)處理的示例詳解

    SpringMvc請求處理參數(shù)?和?響應(yīng)數(shù)據(jù)處理的示例詳解

    這篇文章主要介紹了SpringMvc請求處理參數(shù)和響應(yīng)數(shù)據(jù)處理,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • java多線程:基礎(chǔ)詳解

    java多線程:基礎(chǔ)詳解

    這篇文章主要介紹了java多線程編程實例,分享了幾則多線程的實例代碼,具有一定參考價值,加深多線程編程的理解還是很有幫助的,需要的朋友可以參考下。
    2021-08-08
  • WebDriver實現(xiàn)自動化打開IE中的google網(wǎng)頁并實現(xiàn)搜索

    WebDriver實現(xiàn)自動化打開IE中的google網(wǎng)頁并實現(xiàn)搜索

    這篇文章主要介紹了WebDriver實現(xiàn)自動化打開IE中的google網(wǎng)頁并實現(xiàn)搜索,需要的朋友可以參考下
    2014-04-04

最新評論