标签:style blog http color io os 使用 java ar
我们首先需要明白什么是适配器,如上图是电源插座适配器。通过这一个适配器可以让三孔插座“插到”二孔插座上。而在实际编码中,如果两个接口之间能搭配使用,第一种方法就是改变其中一方的源码,但是很多时候这需要很大的工作量,这是我们可以在这两个接口之间加一个适配器,这样就可以相对来说用较少的人力、物力消耗来达到同样的效果。
举个例子来说:在Java早期的集合类型中都实现了一个elements()方法,该方法会返回一个Enumeration类型,Enumeration接口中定义了两个方法hasMoreElements()和nextElements(),用来对集合中的元素进行遍历。而在Sum公司推出新的集合类之后,开始使用Iterator接口来对集合中的元素进行遍历,如果某个方法只支持Iterator,不支持Enumeration,那么就可以在这里定义一个适配器,来进行中间转换。
具体代码如下:
1 /** 2 * Enumeration 到 Iterator的适配器 3 * @author Apache_xiaochao 4 * 5 * @param <E> 6 */ 7 public class Enumeration2Iterator<E> implements Iterator<E> { 8 9 private Enumeration<E> enumeration; 10 11 public Enumeration2Iterator(Enumeration<E> enumeration) { 12 super(); 13 this.enumeration = enumeration; 14 } 15 16 @Override 17 public boolean hasNext() { 18 return enumeration.hasMoreElements(); 19 } 20 21 @Override 22 public E next() { 23 return enumeration.nextElement(); 24 } 25 26 @Override 27 public void remove() { 28 //不支持此操作,所以用异常来通知用户 29 throw new UnsupportedOperationException(); 30 } 31 32 }
测试代码如下:
1 public class Driver { 2 3 /** 4 * 遍历打印集合元素的方法 5 * @param iterator 6 */ 7 public<E> void iterate(Iterator<E> iterator){ 8 while(iterator.hasNext()){ 9 System.out.println(iterator.next()); 10 } 11 } 12 13 public static void main(String[] args) { 14 15 Driver driver = new Driver(); 16 Vector<String> vector = new Vector<>(); 17 vector.add("a"); 18 vector.add("b"); 19 vector.add("c"); 20 //这里我们假设Vector不支持iterators()方法 21 //driver.iterate(vector.elements()); //因为iterate方法不支持Enumeration,只支持Iterator,所以这里需要一个适配器进行转换 22 driver.iterate(new Enumeration2Iterator<>(vector.elements())); 23 } 24 25 }
标签:style blog http color io os 使用 java ar
原文地址:http://www.cnblogs.com/xiaochao-cs-whu/p/3983190.html