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

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

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

    從集合類(lèi)的升級(jí)聯(lián)想到Java適配器(Adapter)模式

    Historical Collection Classes(JDK1.1 之前)
    提供的容器有Arrays,Vector,Stack,Hashtable,Properties,BitSet。其中定義出一種走訪群集內(nèi)各元素的標(biāo)準(zhǔn)方式,稱(chēng)為Enumeration(列舉器)接口,用法如下:
    Vector v=new Vector();
    for (Enumeration enum =v.elements(); enum.hasMoreElements();) {
    Object o 
    = enum.nextElement();
    processObject(o);
    }

    而在JDK1.2版本中引入了Iterator接口,新版本的集合對(duì)象(HashSet,HashMap,WeakHeahMap,ArrayList,TreeSet,TreeMap, LinkedList)是通過(guò)Iterator接口訪問(wèn)集合元素的。
    例如:
    List list=new ArrayList();
    for(Iterator it=list.iterator();it.hasNext();)
    {
        System.out.println(it.next());
    }

    這樣,如果將老版本的程序運(yùn)行在新的Java編譯器上就會(huì)出錯(cuò)。因?yàn)長(zhǎng)ist接口中已經(jīng)沒(méi)有elements(),而只有iterator()了。那么如何可以使老版本的程序運(yùn)行在新的Java編譯器上呢?如果不加修改,是肯定不行的,但是修改要遵循“開(kāi)-閉”原則。
    這時(shí)候我想到了Java設(shè)計(jì)模式中的適配器模式。

    /*
    *@author 我為J狂 建立日期 2007-4-18
    *
    */

    package net.blogjava.lzqdiy;

    import java.util.ArrayList;
    import java.util.Enumeration;
    import java.util.Iterator;
    import java.util.List;

    public class NewEnumeration implements Enumeration
    {

        Iterator it;
        
    public NewEnumeration(Iterator it)
        
    {
            
    this.it=it;
            
    // TODO Auto-generated constructor stub
        }


        
    public boolean hasMoreElements()
        
    {
            
    // TODO Auto-generated method stub
            return it.hasNext();
        }


        
    public Object nextElement()
        
    {
            
    // TODO Auto-generated method stub
            return it.next();
        }

        
    public static void main(String[] args)
        
    {
            List list
    =new ArrayList();
            list.add(
    "a");
            list.add(
    "b");
            list.add(
    "C");
            
    for(Enumeration e=new NewEnumeration(list.iterator());e.hasMoreElements();)
            
    {
                System.out.println(e.nextElement());
            }

        }

    }

    NewEnumeration是一個(gè)適配器類(lèi),通過(guò)它實(shí)現(xiàn)了從Iterator接口到Enumeration接口的適配,這樣我們就可以使用老版本的代碼來(lái)使用新的集合對(duì)象了。

    posted on 2007-04-18 19:29 我為J狂 閱讀(2040) 評(píng)論(8)  編輯  收藏 所屬分類(lèi): 設(shè)計(jì)模式

    評(píng)論

    # re: 學(xué)習(xí)了Java適配器模式有感 2007-04-18 19:32 久城

    學(xué)習(xí)!  回復(fù)  更多評(píng)論   

    # re: 從集合類(lèi)的升級(jí)聯(lián)想到Java適配器模式 2007-04-18 19:48 劉甘泉

    恩,對(duì)象適配器  回復(fù)  更多評(píng)論   

    # re: 從集合類(lèi)的升級(jí)聯(lián)想到Java適配器模式[未登錄](méi) 2007-04-19 09:18 Matthew

    好!  回復(fù)  更多評(píng)論   

    # re: 從集合類(lèi)的升級(jí)聯(lián)想到Java適配器模式 2007-04-19 13:23 icom

    good...  回復(fù)  更多評(píng)論   

    # re: 從集合類(lèi)的升級(jí)聯(lián)想到Java適配器模式 2007-04-19 16:23 BeanSoft

    真是不錯(cuò)...  回復(fù)  更多評(píng)論   

    # re: 從集合類(lèi)的升級(jí)聯(lián)想到Java適配器模式 2007-04-19 17:22 Ivan Chen(西濱)

    有用嗎?你老的代碼也不知道NewEnumeration啊,這樣做只是讓來(lái)的代碼改一下,仍然可以用Enumeration的方式訪問(wèn)集合,那倒不如直接用新的iterator訪問(wèn)好了。  回復(fù)  更多評(píng)論   

    # re: 從集合類(lèi)的升級(jí)聯(lián)想到Java適配器模式 2007-04-19 17:58 我為J狂

    @Ivan Chen(西濱)
    如果直接用Iterator接口訪問(wèn),那么客戶(hù)端(main方法中的代碼)需要修改的代碼會(huì)很多,我所做的工作的注主要目的就是使盡量少修改客戶(hù)端代碼,甚至不修改,而這正是Java設(shè)計(jì)模式中必需遵循的“開(kāi)-閉”原則,即對(duì)擴(kuò)展開(kāi)放,而對(duì)修改關(guān)閉。  回復(fù)  更多評(píng)論   

    # re: 從集合類(lèi)的升級(jí)聯(lián)想到Java適配器(Adapter)模式[未登錄](méi) 2009-06-19 00:39 me

    沒(méi)明白,這幾行代碼在新java version不是可以用嘛,為什么要加Adapter
    Vector v=new Vector();
    for (Enumeration enum =v.elements(); enum.hasMoreElements();) {
    Object o = enum.nextElement();
    processObject(o);
    }
      回復(fù)  更多評(píng)論   

    <2007年4月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(11)

    隨筆分類(lèi)(48)

    文章分類(lèi)(29)

    常去逛逛

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产伦精品一区二区三区免费迷| 国产免费久久精品99久久| 亚洲欧洲精品在线| 亚洲va中文字幕无码久久| 亚洲人成网站在线播放vr| 亚洲欧洲日产国码无码久久99 | 久久久久亚洲AV无码去区首| wwwxxx亚洲| 亚洲精品无码不卡在线播放| 亚洲精品中文字幕| 亚洲国产成人久久精品大牛影视 | 亚洲人成色7777在线观看不卡 | 成人奭片免费观看| 18禁无遮挡无码网站免费| 嫩草影院免费观看| 国产国产人免费视频成69大陆| 日本人护士免费xxxx视频| 免费jjzz在线播放国产| 亚洲精品网站在线观看不卡无广告| 亚洲精品国产高清嫩草影院| 亚洲最大激情中文字幕| 久久久亚洲欧洲日产国码二区| 亚洲中字慕日产2020| 亚洲成熟丰满熟妇高潮XXXXX| 免费精品国自产拍在线播放| 成全视成人免费观看在线看| 嫩草影院在线播放www免费观看| 在线观看永久免费| 天天操夜夜操免费视频| 亚洲国产成人VA在线观看| 亚洲精品无码鲁网中文电影| 亚洲一本综合久久| 亚洲冬月枫中文字幕在线看| 亚洲欧美成人一区二区三区| 一区二区免费在线观看| 黄色网站软件app在线观看免费| 91成人在线免费观看| 四虎成人免费影院网址| 久久亚洲色一区二区三区| 亚洲黄色一级毛片| 亚洲av无码专区亚洲av不卡|