设计模式详解——迭代器模式

云中志

共 1076字,需浏览 3分钟

 ·

2021-10-20 14:50

前言

今天我们要学习的这个设计模式,我们其实在日常开发中也经常用到,但也仅仅只是用过,所以很多时候我都不觉得它是一种设计模式,它就是迭代器模式,由于这个设计模式比较简单,所以关于它我们能讲的内容也不多,因此呢,今天的内容也就比较少。

迭代器模式

迭代器模式(Iterator Pattern)是 Java.Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。

迭代器模式提供了一种方法顺序,访问一个聚合对象中的各个元素,而又不暴露其内部具体实现细节

要点

  • 迭代器模式让我们能游走于聚合内的每一个元素,而又不暴露其内部的实现细节
  • 把游走的任务放在迭代器上,而不是聚合上。这样简化了聚合的接口和实现,也让责任各得其所

应用

关于迭代器模式,用的最多的当然就是java容器部分的相关内容,比如Collection接口。这里我们通过一个简易的手写容器,来演示它具体的应用场景。

适配器接口

首先是迭代器的接口,它有两个方法,一个用于判断容器是否包含元素;另一个用于拿出容器中的当前角标最小的元素(默认为为0

public interface Iterator {
   boolean hasNext();
   Object next();
}
容器接口

然后是容器接口,容器接口只有一个方法,就是获取迭代器。

public interface Container {
   Iterator getIterator();
}
容器实现

容器的内部实现包括了迭代器的实现

public class SyskeContainer implements Container {
   public Object[] values = {"云中志" , "java" ,"志哥" , "syske"};
 
   @Override
   public Iterator getIterator() {
      return new SyskeIterator();
   }
 
   private class SyskeIterator implements Iterator {
 
      int index;
 
      @Override
      public boolean hasNext() {
         if(index < values.length){
            return true;
         }
         return false;
      }
 
      @Override
      public Object next() {
         if(this.hasNext()){
            return values[index++];
         }
         return null;
      }     
   }
}
测试代码

下面的测试代码也很简单,就是获取SyskeContainer的迭代器,然后通过它的迭代器,实现对SyskeContainer容器的遍历操作:

public class SyskeContainerTest extends TestCase {

    public void testIterator() {
        SyskeContainer syskeContainer = new SyskeContainer();
        Iterator iterator = syskeContainer.getIterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }

}

运行结果如下:

总结

从上面的内容以及我们的代码中其实可以看出来,相比于我们前面讲到的设计模式,迭代器的内容就显得比较少,而且比较简单,更重要的是,它的应用场景也很窄,基本上都是集中在批量操作的业务中,所起的作用就是代替具体的容器,实现遍历操作,然后实现具体容器与业务之间的耦合关系。

- END -


浏览 14
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报