服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

从集合类的升级联想到java适配器模式

   historical collection classes(jdk1.1 之前)
   提供的容器有arrays,vector,stack,hashtable,properties,bitset。其中定义出一种走访群集内各元素的标准方式,称为enumeration(列举器)接口,用法如下:
从集合类的升级联想到java适配器模式(图一)vector v=new vector();
从集合类的升级联想到java适配器模式(图二)从集合类的升级联想到java适配器模式(图三)for (enumeration enum =v.elements(); enum.hasmoreelements();) 从集合类的升级联想到java适配器模式(图四){
从集合类的升级联想到java适配器模式(图五)object o = enum.nextelement();
从集合类的升级联想到java适配器模式(图五)processobject(o);
从集合类的升级联想到java适配器模式(图六)}
从集合类的升级联想到java适配器模式(图一)
   而在jdk1.2版本中引入了iterator接口,新版本的集合对象  (hashset,hashmap,weakheahmap,arraylist,treeset,treemap, linkedlist)是通过iterator接口访问集合元素的。
例如:
从集合类的升级联想到java适配器模式(图一)list list=new arraylist();
从集合类的升级联想到java适配器模式(图一)for(iterator it=list.iterator();it.hasnext();)
从集合类的升级联想到java适配器模式(图二)从集合类的升级联想到java适配器模式(图三)从集合类的升级联想到java适配器模式(图四){
从集合类的升级联想到java适配器模式(图五)    system.out.println(it.next());
从集合类的升级联想到java适配器模式(图六)}

    这样,如果将老版本的程序运行在新的java编译器上就会出错。因为list接口中已经没有elements(),而只有iterator()了。那么如何可以使老版本的程序运行在新的java编译器上呢?如果不加修改,是肯定不行的,但是修改要遵循“开-闭”原则。
    这时候我想到了java设计模式中的适配器模式。

从集合类的升级联想到java适配器模式(图二)从集合类的升级联想到java适配器模式(图三)/**//*
从集合类的升级联想到java适配器模式(图五)*@author 我为j狂 建立日期 2007-4-18
从集合类的升级联想到java适配器模式(图五)*
从集合类的升级联想到java适配器模式(图六)*/
从集合类的升级联想到java适配器模式(图一)package net.blogjava.lzqdiy;
从集合类的升级联想到java适配器模式(图一)
从集合类的升级联想到java适配器模式(图一)import java.util.arraylist;
从集合类的升级联想到java适配器模式(图一)import java.util.enumeration;
从集合类的升级联想到java适配器模式(图一)import java.util.iterator;
从集合类的升级联想到java适配器模式(图一)import java.util.list;
从集合类的升级联想到java适配器模式(图一)
从集合类的升级联想到java适配器模式(图一)public class newenumeration implements enumeration
从集合类的升级联想到java适配器模式(图二)从集合类的升级联想到java适配器模式(图三)从集合类的升级联想到java适配器模式(图四){
从集合类的升级联想到java适配器模式(图五)
从集合类的升级联想到java适配器模式(图五)    iterator it;
从集合类的升级联想到java适配器模式(图五)    public newenumeration(iterator it)
从集合类的升级联想到java适配器模式(图七)从集合类的升级联想到java适配器模式(图八)    从集合类的升级联想到java适配器模式(图四){
从集合类的升级联想到java适配器模式(图五)        this.it=it;
从集合类的升级联想到java适配器模式(图五)        // todo auto-generated constructor stub
从集合类的升级联想到java适配器模式(图九)    }
从集合类的升级联想到java适配器模式(图五)
从集合类的升级联想到java适配器模式(图五)    public boolean hasmoreelements()
从集合类的升级联想到java适配器模式(图七)从集合类的升级联想到java适配器模式(图八)    从集合类的升级联想到java适配器模式(图四){
从集合类的升级联想到java适配器模式(图五)        // todo auto-generated method stub
从集合类的升级联想到java适配器模式(图五)        return it.hasnext();
从集合类的升级联想到java适配器模式(图九)    }
从集合类的升级联想到java适配器模式(图五)
从集合类的升级联想到java适配器模式(图五)    public object nextelement()
从集合类的升级联想到java适配器模式(图七)从集合类的升级联想到java适配器模式(图八)    从集合类的升级联想到java适配器模式(图四){
从集合类的升级联想到java适配器模式(图五)        // todo auto-generated method stub
从集合类的升级联想到java适配器模式(图五)        return it.next();
从集合类的升级联想到java适配器模式(图九)    }
从集合类的升级联想到java适配器模式(图五)    public static void main(string[] args)
从集合类的升级联想到java适配器模式(图七)从集合类的升级联想到java适配器模式(图八)    从集合类的升级联想到java适配器模式(图四){
从集合类的升级联想到java适配器模式(图五)        list list=new arraylist();
从集合类的升级联想到java适配器模式(图五)        list.add("a");
从集合类的升级联想到java适配器模式(图五)        list.add("b");
从集合类的升级联想到java适配器模式(图五)        list.add("c");
从集合类的升级联想到java适配器模式(图五)        for(enumeration e=new newenumeration(list.iterator());e.hasmoreelements();)
从集合类的升级联想到java适配器模式(图七)从集合类的升级联想到java适配器模式(图八)        从集合类的升级联想到java适配器模式(图四){
从集合类的升级联想到java适配器模式(图五)            system.out.println(e.nextelement());
从集合类的升级联想到java适配器模式(图九)        }
从集合类的升级联想到java适配器模式(图九)    }
从集合类的升级联想到java适配器模式(图六)}
从集合类的升级联想到java适配器模式(图一)
   newenumeration是一个适配器类,通过它实现了从iterator接口到enumeration接口的适配,这样我们就可以使用老版本的代码来使用新的集合对象了。

扫描关注微信公众号