<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Change Dir

    先知cd——熱愛生活是一切藝術的開始

    統計

    留言簿(18)

    積分與排名

    “?!眰兊牟┛?/h3>

    各個公司技術

    我的鏈接

    淘寶技術

    閱讀排行榜

    評論排行榜

    實際應用delegate做好api簡潔設計——從commons-io排序器想開

    我們已經知道,在完成一個通用功能的設計時,必然會抽象并且隔離功能級別,把最一般的功能抽象出來,放到接口里去,具體實現接口的類完成具體功能。因為所有的具體實現都有共同的接口,雖然功能實際不同,但是抽象含義相似,因此在抽象級別,其他類調用時就可以把最抽象的接口作為代理(委托)來調用,思路簡單清晰。

    在commons-io這個開源框架中,封裝了對io的基本操作,其中org.apache.commons.io.comparator包就是經典的設計典范,comparator顧名思義就是為了提供一系列的文件排序器,輔助排序。這里我把結構圖畫一下:

    image

    一個AbstractFileComparator抽象類完成了一層包內抽象,直接實現接口Comparator<File>,并且提供了sort方法完成了通過比較的排序功能:

    public File[] sort(File... files) {
            if (files != null) {
                Arrays.sort(files, this);
            }
            return files;
        }

    public List<File> sort(List<File> files) {
            if (files != null) {
                Collections.sort(files, this);
            }
            return files;
        }

     

     

     

     

    所有的具體排序器實現都繼承了這個AbstractFileComparator抽象類,實現compare方法,完成各自的比較,比如有根據文件大小比較的SizeFileComparator,有根據修改時間比較的LastModifiedFileComparator等等。值得一提的就是用到了委托的ReverseComparator和CompositeFileComparator,Reverse顧名思義就是反轉排序,默認的排序器都是升序的,誰小把誰排在前面,ReverseComparator通過代理一個Comparator

    private final Comparator<File> delegate;

    構造時作為參數把delegate實例化,public ReverseComparator(Comparator<File> delegate),最后實現compare方法:

    public int compare(File file1, File file2) {
           return delegate.compare(file2, file1); // parameters switched round
       }

    完成整個反轉排序的功能,看出端倪了吧。一個代理的引入,減少了一半的工作量,把排序功能實現的非常全面。

    同理,組合排序器的實現正好利用了多維的代理

    private final Comparator<File>[] delegates;

    構造時傳入的參數是一個可變長度數組,public CompositeFileComparator(Comparator<File>... delegates),或者一個可迭代對象,public CompositeFileComparator(Iterable<Comparator<File>> delegates),實現的compare方法如下:

    public int compare(File file1, File file2) {
            int result = 0;
            for (Comparator<File> delegate : delegates) {
                result = delegate.compare(file1, file2);
                if (result != 0) {
                    break;
                }
            }
            return result;
        }

    組合排序就是提供一系列排序器,順序比較,直到出現不相等情況??紤]到實際應用,我們經常是否只是實現了Comparable接口,在compareTo方法中寫if else呢?引入代理的排序器api設計,給了我們不錯的啟示。

    posted on 2012-04-28 11:47 changedi 閱讀(1627) 評論(1)  編輯  收藏 所屬分類: Java技術

    評論

    # re: 實際應用delegate做好api簡潔設計&mdash;&mdash;從commons-io排序器想開 2012-04-29 10:26 tb

    嗯 不錯的  回復  更多評論   

    主站蜘蛛池模板: 国产成人精品亚洲| 亚洲午夜精品在线| 国产成人亚洲综合| 情人伊人久久综合亚洲| 亚洲人成电影亚洲人成9999网| 一区在线免费观看| 2020因为爱你带字幕免费观看全集 | 亚洲五月六月丁香激情| 久章草在线精品视频免费观看| 免费观看无遮挡www的小视频| 四虎影视精品永久免费| 亚洲精品亚洲人成人网| a级毛片在线免费看| 色婷婷六月亚洲婷婷丁香| a一级毛片免费高清在线| 久久99亚洲综合精品首页| jiz zz在亚洲| 国产在线观看免费完整版中文版| 美女被免费网站在线视频免费| h视频在线免费看| 亚洲日本乱码一区二区在线二产线| 日本XXX黄区免费看| 国产AV无码专区亚洲AV毛网站| 免费一级毛片无毒不卡| 亚洲国产一级在线观看| 亚洲人成网站在线在线观看| 中文字幕亚洲免费无线观看日本| 亚洲国产日产无码精品| 日韩精品免费电影| 国产亚洲精品免费视频播放| 亚洲国产中文字幕在线观看| 丁香花在线视频观看免费| 亚洲国产成人久久| 免费一级毛片正在播放| 爱情岛论坛免费视频| 久久99国产亚洲精品观看| 嫖丰满老熟妇AAAA片免费看| 人人爽人人爽人人片A免费| www.亚洲精品.com| 一级特黄特色的免费大片视频| 亚洲AV无码不卡在线播放|