zoukankan      html  css  js  c++  java
  • 迭代器模式

    1、模式定义

    迭代器模式(Iterator Pattern) :提供一种方法来訪问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。

    2、模式结构
    迭代器模式包括例如以下角色:
    Iterator: 抽象迭代器
    ConcreteIterator: 详细迭代器
    Aggregate: 抽象聚合类
    ConcreteAggregate: 详细聚合类

    3、模式分析
    聚合是一个管理和组织数据对象的数据结构。
    聚合对象主要拥有两个职责:一是存储内部数据。二是遍历内部数据。 
    存储数据是聚合对象最主要的职责。
    将遍历聚合对象中数据的行为提取出来。封装到一个迭代器中。通过专门的迭代器来遍历聚合对象的内部数据,这就是迭代器模式的本质。

    迭代器模式是“单一职责原则”的完美体现。 

    模式分析
    自己定义迭代器
    MyIterator——抽象迭代器
    MyCollection——抽象聚合类
    NewCollection——详细聚合类
    NewIterator——详细迭代器
    Client 

    public class ConcreteIterator implements Iterator
    {
    	private ConcreteAggregate objects;
    	
    	public ConcreteIterator(ConcreteAggregate objects)
    	{
    		this.objects=objects;
    	}
    	public void first()
    	{  ......  }
    		
    	public void next()
    	{  ......  }
    	public boolean hasNext()
    	{  ......  }
    	
    	public Object currentItem()
    	{  ......  }
    }
    public class ConcreteAggregate implements Aggregate
    {	
        ......	
    	public Iterator createIterator()
    	{
    		return new ConcreteIterator(this);
    	}
    	......
    }
    

    在迭代器模式中应用了工厂方法模式。聚合类充当工厂类。而迭代器充当产品类,因为定义了抽象层。系统的扩展性非常好,在client能够针对抽象聚合类和抽象迭代器进行编程。
    因为非常多编程语言的类库都已经实现了迭代器模式,因此在实际使用中我们非常少自己定义迭代器。仅仅须要直接使用Java、C#等语言中已定义好的迭代器就可以,迭代器已经成为我们操作聚合对象的基本工具之中的一个。

    4、模式优缺点
    迭代器模式的长处
    它支持以不同的方式遍历一个聚合对象。


    迭代器简化了聚合类。


    在同一个聚合上能够有多个遍历。
    在迭代器模式中,添加新的聚合类和迭代器类都非常方便,无须改动原有代码,满足“开闭原则”的要求。

    迭代器模式的缺点
    因为迭代器模式将存储数据和遍历数据的职责分离,添加新的聚合类须要相应添加新的迭代器类,类的个数成对添加,这在一定程度上添加了系统的复杂性。


    5、模式适用环境
    在下面情况下能够使用迭代器模式:
    訪问一个聚合对象的内容而无须暴露它的内部表示。
    须要为聚合对象提供多种遍历方式。
    为遍历不同的聚合结构提供一个统一的接口。

  • 相关阅读:
    什么是 Visual VM?
    myeclipse svn 修改用户名和密码
    unix/linux共享内存应用与陷阱
    linux内存查看方式
    Linux下crontab命令的用法
    linux ftp命令参数全集
    XmlDataSource控件绑定GridView
    VC++发布Activex控件
    SqlServer数据库自定义Split()函数
    C和C++中的主要数据类型和字节大小
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7293932.html
Copyright © 2011-2022 走看看