zoukankan      html  css  js  c++  java
  • 十一个行为模式之迭代器模式(Iterator Pattern)

    定义:
    提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示。使得存储和遍历两个职责相互分离,提高系统的可扩展性。

    结构图:

    • Iterator:抽象迭代器类,定义了访问和遍历元素的接口,例如:next(),hasNext()等方法。所有具体的迭代器将实现这些方法来完成对聚合对象的访问。
    • ConcreteIterator:具体迭代器类,通常包含一个游标和一个对具体聚合类的引用。游标一般是一个非负整数,来记录访问的当前元素位置。
    • Aggregate:聚合抽象类,除了定义了该聚合类的一些业务上的接口,也定义了一个createIterator()方法来创建迭代器,充当工厂方法的角色。
    • ConcreteAggregate:具体聚合类,实现了Aggreate的具体方法,并且返回一个对应自己的迭代器。

    注意:

    • 具体聚合类和具体迭代器之间有着相互依赖关系,一般在具体迭代器中要维持一个具体聚合对象的引用。除了使用关联关系外还可以使用内部类的方法。在JDK中迭代器的实现就采用的内部类的方法,代码片段如下:
    package java.util;  
    ……  
    public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {  
        ......  
        private class Itr implements Iterator<E> {  
            int cursor = 0;  
            ......  
    }  
    ……  
    }
    

    优点:

    • 支持以不同方式遍历一个聚合对象,而不同方式采取不同的迭代器实现不同的迭代算法即可,不需要改变聚合类。
    • 简化了聚合类的设计,将对象的存储和遍历两个功能进行隔离,方便扩展,满足开闭原则。

    实例:

    IteratorPattern.java

  • 相关阅读:
    linux 内核防火墙配置规则
    postfix 配置邮件服务器
    JDK 和 tomcat 安装 配置
    ifstat-网络接口监测工具
    一个比较通用的Makefile
    [转]vim常用命令
    [转]Valgrind简单用法
    [转]UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching)
    [转]Reed Solomon纠删码
    [转]分布式文件系统FastDFS架构剖析
  • 原文地址:https://www.cnblogs.com/zhangfei614/p/6081475.html
Copyright © 2011-2022 走看看