19 C#设计模式-迭代器模式.ppt
《19 C#设计模式-迭代器模式.ppt》由会员分享,可在线阅读,更多相关《19 C#设计模式-迭代器模式.ppt(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、www.ChinaSA.infoDDesign esign P Patternsatterns迭代器模式迭代器模式迭代器模式迭代器模式刘刘 伟伟(Sunny)weiliu_www.ChinaSA.info大纲w迭代器模式概述w迭代器模式的结构与实现w迭代器模式的应用实例w使用内部类实现迭代器w.NET内置迭代器w迭代器模式的优缺点与适用环境遥遥控控器器www.ChinaSA.info迭代器模式概述w电视机遥控器与电视机示意图www.ChinaSA.info迭代器模式概述w分析电视机电视机 存储电视频道的集合存储电视频道的集合 聚合类聚合类(Aggregate Classes)电视机遥控器电视机
2、遥控器 操作电视频道操作电视频道 迭代器迭代器(Iterator)访问一个聚合对象中的元素但又不需要暴露它的内部访问一个聚合对象中的元素但又不需要暴露它的内部结构结构www.ChinaSA.info迭代器模式概述w分析聚合对象的两个职责:聚合对象的两个职责:存储数据存储数据,聚合对象的基本职责遍历数据遍历数据,既是可变化的,又是可分离的将遍历数据的行为从聚合对象中分离出来将遍历数据的行为从聚合对象中分离出来,封装在迭,封装在迭代器对象中代器对象中由迭代器来提供遍历聚合对象内部数据的行为,由迭代器来提供遍历聚合对象内部数据的行为,简化简化聚合对象的设计聚合对象的设计,更符合单一职责原则更符合单一
3、职责原则www.ChinaSA.info迭代器模式概述w迭代器模式的定义对象行为型对象行为型模式模式迭迭代代器器模模式式:提供一种方法顺顺序序访访问问一一个个聚聚合合对对象象中中各各个个元素元素,且不用暴露不用暴露该对该对象的内部表示象的内部表示。Iterator Pattern:Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.www.ChinaSA.info迭代器模式概述w迭代器模式的定义又名又名游标游
4、标(Cursor)模式模式通过引入迭代器,通过引入迭代器,客户端无须了解聚合对象的内部结客户端无须了解聚合对象的内部结构即可实现对聚合对象中成员的遍历构即可实现对聚合对象中成员的遍历,还,还可以根据需可以根据需要很方便地增加新的遍历方式要很方便地增加新的遍历方式www.ChinaSA.info迭代器模式的结构与实现w迭代器模式的结构www.ChinaSA.info迭代器模式的结构与实现w迭代器模式的结构迭代器模式包含以下迭代器模式包含以下4个角色:个角色:Iterator(抽象迭代器)ConcreteIterator(具体迭代器)Aggregate(抽象聚合类)ConcreteAggregat
5、e(具体聚合类)www.ChinaSA.info迭代器模式的结构与实现w迭代器模式的实现典型的抽象迭代器代码:典型的抽象迭代器代码:interface Iterator void First();/将游标指向第一个元素 void Next();/将游标指向下一个元素 bool HasNext();/判断是否存在下一个元素 object CurrentItem();/获取游标指向的当前元素www.ChinaSA.info迭代器模式的结构与实现w迭代器模式的实现典型的具体迭代器代码:典型的具体迭代器代码:class ConcreteIterator:Iterator private Concret
6、eAggregate objects;/维维持持一一个个对对具具体体聚聚合合对对象象的的引引用用,以以便便于于访访问问存存储储在在聚聚合合对对象中的数据象中的数据 private int cursor;/定定义义一个游一个游标标,用于,用于记录记录当前当前访问访问位置位置 public ConcreteIterator(ConcreteAggregate objects)this.objects=objects;public void First()/实现代码 public void Next()/实现代码 public bool HasNext()/实现代码 public object Cu
7、rrentItem()/实现代码 www.ChinaSA.info迭代器模式的结构与实现w迭代器模式的实现典型的抽象聚合类代码:典型的抽象聚合类代码:interface Aggregate Iterator CreateIterator();www.ChinaSA.info迭代器模式的结构与实现w迭代器模式的实现典型的具体聚合类代码:典型的具体聚合类代码:class ConcreteAggregate:Aggregate .public Iterator CreateIterator()return new ConcreteIterator(this);.www.ChinaSA.info迭代器
8、模式的应用实例w实例说明某软件公司为某商场开发了一套销售管理系统,在对该系统进行分析和设计时,开发人员发现经常需要对系统中的商品数据、客户数据等进行遍历,为了复用这些遍历代码,开发人员设计了一个抽象的数据集合类AbstractObjectList,将存储商品和客户等数据的类作为其子类,AbstractObjectList类结构如下图所示:AbstractObjectList类结类结构构图图在图中,List类型的对象objects用于存储数据,其方法与说明如下表所示:AbstractObjectList类类的方法与的方法与说说明明AbstractObjectList类的子类ProductList
9、和CustomerList分别用于存储商品数据和客户数据。通过分析,发现AbstractObjectList类的职责非常重,它既负责存储和管理数据,又负责遍历数据,违背了单一职责原则,实现代码将非常复杂。因此,开发人员决定使用迭代器模式对AbstractObjectList类进行重构,将负责遍历数据的方法提取出来,封装到专门的类中,实现数据存储和数据遍历分离,还可以给不同的具体数据集合类提供不同的遍历方式。现给出使用迭代器模式重构后的解决方案。方法名方法名方法方法说说明明AbstractObjectList()构造方法,用于给objects对象赋值AddObject()增加元素RemoveOb
10、ject()删除元素GetObjects()获取所有元素Next()移至下一个元素IsLast()判断当前元素是否是最后一个元素Previous()移至上一个元素IsFirst()判断当前元素是否是第一个元素GetNextItem()获取下一个元素GetPreviousItem()获取上一个元素www.ChinaSA.info迭代器模式的应用实例w实例类图销售管理系统数据遍历结构图销售管理系统数据遍历结构图www.ChinaSA.info迭代器模式的应用实例w实例代码(1)AbstractObjectList:抽象聚合类:抽象聚合类(2)ProductList:商品数据类,充当具体聚合类:商品
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 19 C#设计模式-迭代器模式 C# 设计 模式 迭代器
限制150内