美文网首页
适配器模式的一个小实例

适配器模式的一个小实例

作者: UnivJS | 来源:发表于2016-05-24 10:14 被阅读997次

最近学习适配器模式,一直没有找到合适的例子来直观的感受什么是适配器模式。下面给出一个简单的示例。适配器模式的相关知识请先自行学习。

适配器模式的核心

  • 适配器是自己定义出来的;

  • 适配器实现目标接口

  • 适配器持有被适配接口(对象)的引用

  • 对目标对象(接口)的调用实际上被转发给了被适配对象(接口)

举例

在不少遗留代码中,方法的返回值为Enumeration,如servlet中的getParameterNames方法定义如下:


public Enumeration<String> getParameterNames();

因此此时只能使用枚举的方式去遍历此方法返回的集合。如下:


Enumeration parameterNames = req.getParameterNames();
while (parameterNames.hasMoreElements()) {
  String s = (String) parameterNames.nextElement();
  System.out.println(s);
}

问题在于现在都是以迭代器(Iterator)的方式去遍历集合,那如果想在代码中以统一的迭代器的方式遍历getParameterNames返回的集合应该怎么办?适配器便派上了用场。

这里相当于是想把Enumeration当Iterator使用,所以Iterator是目标接口,而Enumeration是被适配接口

定义Enumeration到Iterator的适配器如下


public class EnumIter implements Iterator {//重点1:配器实现目标接口

   private Enumeration e;//重点2:适配器持有被适配接口(对象)的引用

   public EnumIter(Enumeration e){
       this.e = e;
   }


   //将对目标对象的调用转发给真正的被适配的对象
   public boolean hasNext() {
       return e.hasMoreElements();
   }
   public Object next() {
       return e.nextElement();
   }
   public void remove() {

   }
}

适配器的使用

此时可以按照迭代器的方式去遍历枚举类型。


Enumeration parameterNames = req.getParameterNames();
Iterator enumIter = new EnumIter(parameterNames);//这就是需要实现Iterator的原因
while (enumIter.hasNext()) {
  String s = (String) enumIter.next();
  System.out.println(s);
}

由上可知,真正做工作的还是Enumeration,只是通过适配器这一层的包装后,外界以为使用的是Iterator。亦即,通过适配器将对目标接口(Iterator)的调用转发给了被适配的对象(Enumeration)

相关文章

  • 第4章 结构型模式-适配器模式

    一、适配器模式简介 二、适配器模式的优点 三、适配器模式的实例

  • 适配器模式

    一、适配器模式介绍 二、适配器模式代码实例

  • Java设计模式—适配器模式

    一、定义 共有两类适配器模式 对象适配器模式在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适配...

  • JavaScript 设计模式(中)——14.适配器模式

    14 适配器模式 适配器模式的作用是解决两个软件实体间的接口不兼容的问题; 14.1 适配器模式实例 在之前的地图...

  • 适配器模式

    一、适配器模式 二、实例代码 披着羊皮的狼 三、STL中的适配器模式 deque就是适配器,使用deque实现了s...

  • 适配器模式的一个小实例

    最近学习适配器模式,一直没有找到合适的例子来直观的感受什么是适配器模式。下面给出一个简单的示例。适配器模式的相关知...

  • 设计模式之-适配器模式

    适配器模式:其实就是把一个实例类转换成另外的一个接口的类型的,适配器让原本接口不兼容的类可以合作无间。 适配器是使...

  • 学习iOS设计模式第一章 适配器(Adapter)

    今天学习了iOS设计模式中的适配器模式,适配器有两种模式对象适配器模式-- 在这种适配器模式中,适配器容纳一个它包...

  • 设计模式(Design Patterns)适配器模式(Adapt

    适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。 类的适配器模式 场景:将一个类转换成...

  • 设计模式之适配和装饰

    1. 适配器模式 通过一个简单的例子说一下适配器模式,适配器模式属于接口型模式。适配器模式的意图在于,使用不同接口...

网友评论

      本文标题:适配器模式的一个小实例

      本文链接:https://www.haomeiwen.com/subject/hokzrttx.html