nullDesign PatternsDesign Patterns迭代器模式刘 伟 (Sunny)
weiliu_china@126.com大纲大纲
迭代器模式概述
迭代器模式的结构与实现
迭代器模式的应用实例
使用内部类实现迭代器
.NET内置迭代器
迭代器模式的优缺点与适用环境
遥控器迭代器模式概述迭代器模式概述电视机遥控器与电视机示意图迭代器模式概述迭代器模式概述分析
电视机 存储电视频道的集合 聚合类(Aggregate Classes)
电视机遥控器 操作电视频道 迭代器(Iterator)
访问一个聚合对象中的元素但又不需要暴露它的内部结构
迭代器模式概述迭代器模式概述分析
聚合对象的两个职责:
存储数据,聚合对象的基本职责
遍历数据,既是可变化的,又是可分离的
将遍历数据的行为从聚合对象中分离出来,封装在迭代器对象中
由迭代器来提供遍历聚合对象内部数据的行为,简化聚合对象的设计,更符合单一职责原则迭代器模式概述迭代器模式概述迭代器模式的定义
对象行为型模式迭代器模式概述迭代器模式概述迭代器模式的定义
又名游标(Cursor)模式
通过引入迭代器,客户端无须了解聚合对象的内部结构即可实现对聚合对象中成员的遍历,还可以根据需要很方便地增加新的遍历方式
迭代器模式的结构与实现迭代器模式的结构与实现迭代器模式的结构
迭代器模式的结构与实现迭代器模式的结构与实现迭代器模式的结构
迭代器模式包含以下4个角色:
Iterator(抽象迭代器)
ConcreteIterator(具体迭代器)
Aggregate(抽象聚合类)
ConcreteAggregate(具体聚合类)迭代器模式的结构与实现迭代器模式的结构与实现迭代器模式的实现
典型的抽象迭代器代码:迭代器模式的结构与实现迭代器模式的结构与实现迭代器模式的实现
典型的具体迭代器代码:迭代器模式的结构与实现迭代器模式的结构与实现迭代器模式的实现
典型的抽象聚合类代码:迭代器模式的结构与实现迭代器模式的结构与实现迭代器模式的实现
典型的具体聚合类代码:迭代器模式的应用实例迭代器模式的应用实例实例说明迭代器模式的应用实例迭代器模式的应用实例实例类图销售管理系统数据遍历结构图迭代器模式的应用实例迭代器模式的应用实例实例代码
(1) AbstractObjectList:抽象聚合类
(2) ProductList:商品数据类,充当具体聚合类
(3) AbstractIterator:抽象迭代器
(4) ProductIterator:商品迭代器,充当具体迭代器
(5) Program:客户端测试类参考代码 (DesignPattern\IteratorSample)迭代器模式的应用实例迭代器模式的应用实例结果及分析
如果需要增加一个新的具体聚合类,只需增加一个新的聚合子类和一个新的具体迭代器类即可,原有类库代码无须修改,符合开闭原则
如果需要更换一个迭代器,只需要增加一个新的具体迭代器类作为抽象迭代器类的子类,重新实现遍历方法即可,原有迭代器代码无须修改,也符合开闭原则
如果要在迭代器中增加新的方法,则需要修改抽象迭代器的源代码,这将违背开闭原则
使用内部类实现迭代器使用内部类实现迭代器实现
.NET内置迭代器.NET内置迭代器枚举接口:System.Collections.IEnumerable
.NET内置迭代器.NET内置迭代器抽象的迭代器接口:System.Collections.IEnumerator
.NET内置迭代器.NET内置迭代器分析
ICollection继承自IEnumerable,IList继承自ICollection,而ArrayList是IList的子类,实现了GetEnumerator()方法,并返回一个ArrayListEnumeratorSimple类型的对象
.NET内置迭代器.NET内置迭代器分析
IEnumerable 抽象聚合类
IEnumerator 抽象迭代器
ArrayList 具体聚合类
ArrayListEnumeratorSimple 具体迭代器
.NET内置迭代器.NET内置迭代器应用实例
迭代器模式的优缺点与适用环境迭代器模式的优缺点与适用环境模式优点
支持以不同的方式遍历一个聚合对象,在同一个聚合对象上可以定义多种遍历方式
简化了聚合类
由于引入了抽象层,增加新的聚合类和迭代器类都很方便,无须修改原有代码,符合开闭原则迭代器模式的优缺点与适用环境迭代器模式的优缺点与适用环境模式缺点
在增加新的聚合类时需要对应地增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性
抽象迭代器的设计难度较大,需要充分考虑到系统将来的扩展。在自定义迭代器时,创建一个考虑全面的抽象迭代器并不是一件很容易的事情
迭代器模式的优缺点与适用环境迭代器模式的优缺点与适用环境模式适用环境
访问一个聚合对象的内容而无须暴露它的内部
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示
需要为一个聚合对象提供多种遍历方式
为遍历不同的聚合结构提供一个统一的接口,在该接口的实现类中为不同的聚合结构提供不同的遍历方式,而客户端可以一致性地操作该接口
思考思考扩展.NET中的ArrayList类,自定义一个ReverseArrayList类,要求实现逆向遍历这个类的内部元素。ENDEND