鱼C论坛

 找回密码
 立即注册
查看: 2541|回复: 0

[学习笔记] 迭代器模式

[复制链接]
发表于 2019-7-21 20:31:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
看一个具体的需求
    编写程序展示一个学校院系结构:需求是这样的,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个
    学院有多个系。

传统的方式的问题分析
    1.将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的
    2.实际上我们的要求是:在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系,因此这种方案,
    不能很好实现的遍历的操作
    3.解决方案 => 迭代器模式

迭代器模式基本介绍
    1.迭代器模式是常用的设计模式,属于行为型模式
    2.如果我们的集合元素是用不同的方式实现的,有数组,还有Java的集合类,或者还有其他方式,当客户端要遍历
    这些集合元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式解决
    3.迭代器模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示
    即:不暴露其内部的结构

迭代器模式的原理类图
    对原理类图的说明-即迭代器模式的角色及职责
    1.Iterator:迭代器接口,是系统提供,含有hasNext,next,remove
    2.ConcreteIterator:具体的迭代器类,管理迭代
    3.Aggregate:一个统一的聚合接口,将客户端和具体聚合解耦
    4.ConcreteAgregate:具体的聚合持有对象集合,并提供一个方法,返回一个迭代器,该迭代器可以正确遍历集合
    5.Client:一个客户端,依赖Iterator和Aggregate依赖子类

迭代器模式应用实例
    1.应用实例要求
        编写程序展示一个学院院系结构:需求是这样的,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系
    2.设计思路分析
    3.代码实现
   
public interface Iterator{
    
}

public interface College{
    Iterator createIterator();
}

public class ComputerCollegeIterator{

}

public class InfoColleageIterator{

}

迭代器模式在JDK-ArrayList集合应用的源码分析
    1.jdk的ArrayList集合中就使用了迭代器模式
    2.代码分析+类图+说明
    3.角色分析说明
        内部类Itr充当具体实现迭代器Iterator的类,作为ArrayList内部类
        List就是充当了聚合接口,含有一个iterator()方法,返回一个迭代器对象
        ArrayList是实现聚合接口List的子类,实现了Iterator()
        Iterator:迭代器接口,是系统提供
        迭代器模式解决了不同集合ArrayList,LinkedList统一遍历问题

迭代器模式的注意事项和细节  
    优点
    1.提供了一个同意的方法遍历对象,客户不同在考虑聚合的类型,使用一种方法就可以遍历对象了
    2.隐藏了聚合的内部结构,客户端要遍历聚合的时候只能取到迭代器,而不会知道聚合的具体组成
    3.提供了一种设计思想,就是一个类应该只有一个引起变化的原因,叫做单一责任原则。在聚合类中,我们把
    迭代器分开,就是要把管理对象集合和遍历对象集合的责任分开,这样一来集合改变的话,只影响到聚合对象,而如果
    遍历方式改变的话,只影响到了迭代器
    4.当要展示一组相似对象,或者遍历一组相同的对象时使用,适合使用迭代器模式

    缺点:
    每个聚合对象都要一个迭代器,会生成多个迭代器不好管理类
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 15:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表