设计模式(4)-迭代器模式Itarator

思想:提 供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
场景:访 问一个聚合对象的内容而无需暴露它的内部表示。支持对聚合对象的多种遍历。为遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代)。
实现:其 实就是定义一个逻辑上类似一个指针的迭代类。专门用于这种迭代工作。如果对C++ STL火锅功夫 学习的朋友一定不会陌生啦。实际使用过一下就明白了。除了功能之外,他给我最大的感受就是他让我熟悉的for语句,变长了好多。^-^
迭代器模式由以下角色组成:
1 迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口。
2 具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。
3 容器角色(Container):容器角色负责提供创建具体迭代器角色的接口。
4 具体容器角色(Concrete Container):具体容器角色实现创建具体迭代器角色的接口——这个具体迭代器角色于该容器的结构相关。
迭代器模式UML图如下:
这里写图片描述

迭代器模式在java中的集合框架中用的非常极致:
这里写图片描述

//迭代器 ,该接口提供了迭代遍历的通用方法
public interface Iterator { 
      boolean hasNext(); 
      Object next(); 
      void remove(); 
} 
//容器迭代化接口,凡是实现此接口的集合容器距可以生成相应的迭代器 
public interface Iterable<T>{
      //产生迭代器,将容器对象转换为迭代器对象
      Iterator<T> interator();
}
//java集合框架的根接口,该接口继承了容器迭代化接口,因此java中的集合都可以被迭代
public interface Collection<E> extends Iterable<E>

自定义迭代器:
以ArrayList为例子

public class MyIterator implements Iterable { 
      //存放数据的集合
      private ArrayList list;
     //负责创建具体迭代器角色的工厂方法 
     public Iterator iterator() { 
          return new Itr(list); 
     } 
    //作为内部类的具体迭代器角色 
    private class Itr implements Iterator { 
           ArrayList myList;
          int position = 0; 
           public Itr(ArrayList list) { 
                  this.myList = list; 
           } 
           public Object next() { 
                  Object obj = myList.get(position);
                  position++; 
                  return obj; 
          } 
          public boolean hasNext() { 
                 if (position >= myList.size()) { 
                       return false; 
                 } else { 
                     return true; 
                 } 
           }
        //不支持remove操作
        public void remove(){
              throw new UnsupportedOperationException( 
            "Alternating MyIterator does not support remove()"); 
}
 }
 } 

此处可以为MyIterator 指定被迭代对象的构造器。
Iterator模式的优点:
(1).实现功能分离,简化容器接口。让容器只实现本身的基本功能,把迭代功能委让给外部类实现,符合类的设计原则。
(2).隐藏容器的实现细节。
(3).为容器或其子容器提供了一个统一接口,一方面方便调用;另一方面使得调用者不必关注迭代器的实现细节。
(4).可以为容器或其子容器实现不同的迭代方法或多个迭代方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值