sincerit 迭代器模式(Iterator Pattern)

电视机想必大家家里都有,我们可以把电视机看成一个存储了电视频道的一个集合,我们要换频道进行选择的时候呢可以使用遥控器,那么切换频道就相当于对集合元素进行遍历的操作,可以返回上一个频道,下一个频道,跳转到指定的频道,遥控器为操作电视频道带来了很大的方便,用户并不需要知道这些频道到底是如何存储在电视机中,只要使用遥控器就可以切换频道。在软件开发中,也存在大量类似电视机一样的类,它们可以存储多个成员对象(元素),这些类通常称为聚合类(Aggregate classes), 对应的对象称为聚合对象,为了更方便的操作这些对象同时可以很灵活的为聚合对象添加不同的遍历方法,就也需要想遥控器一样的角色,那么这个可以很灵活的遍历聚合对象的角色就称为迭代器,客户不需要知道聚合对象是如何进行存储的(何种存储结构)就可以实现遍历

迭代器模式:迭代器模式是存储数据和遍历操作相分离的,避免职责过重,它又进行了抽象,便于进行遍历的方式的扩展,同时也方便聚合类的扩展
迭代器模式:有Aggregate抽象类该类可以聚合多个对象, 特别是有一个createIterator()方法创建一个迭代器,还有Iterator抽象类是进行遍历的操作,ConcreteAggregate类实现创建方法,ConcreteIterator实现具体遍历方法
迭代器模式:实质是数据的存储和数据的访问相分离,聚合类提供一个访问的方法(使用迭代器遍历),而不暴露内部的细节

迭代器模式结构图:
在这里插入图片描述

迭代器模式所涉及的类
Aggregate: 抽象聚合类,有一个抽象方法createIterator();
Iterator: 抽象迭代器类,一些抽象的遍历方法;
ConcreteAggregate: 具体迭代器类,实现创建迭代器的方法;
ConcreteIterator: 具体迭代器类,继承抽象迭代器并实现抽象方法;
Client: 客户端类,实现初始化操作及调用遍历方法

案例说明:
。。。待续

猜你喜欢

转载自blog.csdn.net/sincerit/article/details/85056658