欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    设计模式迭代器模式.pptx

    • 资源ID:87500205       资源大小:1.44MB        全文页数:28页
    • 资源格式: PPTX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    设计模式迭代器模式.pptx

    大纲w迭代器模式概述w迭代器模式的结构与实现w迭代器模式的应用实例w使用内部类实现迭代器w.NET内置迭代器w迭代器模式的优缺点与适用环境遥控器第1页/共28页迭代器模式概述电视机遥控器与电视机示意图第2页/共28页迭代器模式概述分析电视机 存储电视频道的集合 聚合类(Aggregate Classes)电视机遥控器 操作电视频道 迭代器(Iterator)访问一个聚合对象中的元素但又不需要暴露它的内部结构第3页/共28页迭代器模式概述分析聚合对象的两个职责:存储数据存储数据,聚合对象的基本职责遍历数据遍历数据,既是可变化的,又是可分离的将遍历数据的行为从聚合对象中分离出来,封装在迭代器对象中由迭代器来提供遍历聚合对象内部数据的行为,简化聚合对象的设计,更符合单一职责原则第4页/共28页迭代器模式概述迭代器模式的定义对象行为型模式迭迭代代器器模模式式:提供一种方法顺顺序序访访问问一一个个聚聚合合对对象象中中各各个个元素元素,且不用暴露该对象的内部表示不用暴露该对象的内部表示。Iterator Pattern:Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.第5页/共28页迭代器模式概述迭代器模式的定义又名游标(Cursor)模式通过引入迭代器,客户端无须了解聚合对象的内部结构即可实现对聚合对象中成员的遍历,还可以根据需要很方便地增加新的遍历方式第6页/共28页迭代器模式的结构与实现迭代器模式的结构第7页/共28页迭代器模式的结构与实现迭代器模式的结构迭代器模式包含以下4个角色:Iterator(抽象迭代器)ConcreteIterator(具体迭代器)Aggregate(抽象聚合类)ConcreteAggregate(具体聚合类)第8页/共28页迭代器模式的结构与实现迭代器模式的实现典型的抽象迭代器代码:interface Iterator void First();/将游标指向第一个元素 void Next();/将游标指向下一个元素 bool HasNext();/判断是否存在下一个元素 object CurrentItem();/获取游标指向的当前元素第9页/共28页迭代器模式的结构与实现迭代器模式的实现典型的具体迭代器代码:class ConcreteIterator:Iterator private ConcreteAggregate objects;/维维持持一一个个对对具具体体聚聚合合对对象象的的引引用用,以以便便于于访访问问存存储储在在聚聚合合对对象中的数据象中的数据 private int cursor;/定义一个游标,用于记录当前访问位置定义一个游标,用于记录当前访问位置 public ConcreteIterator(ConcreteAggregate objects)this.objects=objects;public void First()/实现代码 public void Next()/实现代码 public bool HasNext()/实现代码 public object CurrentItem()/实现代码 第10页/共28页迭代器模式的结构与实现迭代器模式的实现典型的抽象聚合类代码:interface Aggregate Iterator CreateIterator();第11页/共28页迭代器模式的结构与实现迭代器模式的实现典型的具体聚合类代码:class ConcreteAggregate:Aggregate .public Iterator CreateIterator()return new ConcreteIterator(this);.第12页/共28页迭代器模式的应用实例实例说明某软件公司为某商场开发了一套销售管理系统,在对该系统进行分析和设计时,开发人员发现经常需要对系统中的商品数据、客户数据等进行遍历,为了复用这些遍历代码,开发人员设计了一个抽象的数据集合类AbstractObjectList,将存储商品和客户等数据的类作为其子类,AbstractObjectList类结构如下图所示:AbstractObjectList类结构图类结构图在图中,List类型的对象objects用于存储数据,其方法与说明如下表所示:AbstractObjectList类的方法与说明类的方法与说明AbstractObjectList类的子类ProductList和CustomerList分别用于存储商品数据和客户数据。通过分析,发现AbstractObjectList类的职责非常重,它既负责存储和管理数据,又负责遍历数据,违背了单一职责原则,实现代码将非常复杂。因此,开发人员决定使用迭代器模式对AbstractObjectList类进行重构,将负责遍历数据的方法提取出来,封装到专门的类中,实现数据存储和数据遍历分离,还可以给不同的具体数据集合类提供不同的遍历方式。现给出使用迭代器模式重构后的解决方案。方法名方法名方法说明方法说明AbstractObjectList()构造方法,用于给objects对象赋值AddObject()增加元素RemoveObject()删除元素GetObjects()获取所有元素Next()移至下一个元素IsLast()判断当前元素是否是最后一个元素Previous()移至上一个元素IsFirst()判断当前元素是否是第一个元素GetNextItem()获取下一个元素GetPreviousItem()获取上一个元素第13页/共28页迭代器模式的应用实例实例类图销售管理系统数据遍历结构图第14页/共28页迭代器模式的应用实例实例代码(1)AbstractObjectList:抽象聚合类(2)ProductList:商品数据类,充当具体聚合类(3)AbstractIterator:抽象迭代器(4)ProductIterator:商品迭代器,充当具体迭代器(5)Program:客户端测试类演示演示演示演示参考代码参考代码(DesignPatternIteratorSample)第15页/共28页迭代器模式的应用实例结果及分析如果需要增加一个新的具体聚合类,只需增加一个新的聚合子类和一个新的具体迭代器类即可,原有类库代码无须修改,符合开闭原则如果需要更换一个迭代器,只需要增加一个新的具体迭代器类作为抽象迭代器类的子类,重新实现遍历方法即可,原有迭代器代码无须修改,也符合开闭原则如果要在迭代器中增加新的方法,则需要修改抽象迭代器的源代码,这将违背开闭原则第16页/共28页使用内部类实现迭代器实现/ProductListNew.cs 使用内部类实现的商品数据类using System.Collections.Generic;namespace IteratorSample class ProductListNew:AbstractObjectList public ProductListNew(List products):base(products)public override AbstractIterator CreateIterator()return new ProductIterator();/商品迭代器:具体迭代器,内部类实现商品迭代器:具体迭代器,内部类实现 private class ProductIterator:AbstractIterator /迭代器实现代码 第17页/共28页.NET内置迭代器枚举接口:System.Collections.IEnumerablepublic interface IEnumerable IEnumerator GetEnumerator();/工厂方法,获取迭代器对象第18页/共28页.NET内置迭代器抽象的迭代器接口:System.Collections.IEnumeratorpublic interface IEnumerator object Current get;/返回当前集合中的元素bool MoveNext();/遍历集合,移至下一个元素void Reset();/恢复初始位置 第19页/共28页.NET内置迭代器分析ICollection继承自IEnumerable,IList继承自ICollection,而ArrayList是IList的子类,实现了GetEnumerator()方法,并返回一个ArrayListEnumeratorSimple类型的对象public class ArrayList:IList,ICloneablepublic virtual IEnumerator GetEnumerator()return new ArrayListEnumeratorSimple(this);.Serializableprivate class ArrayListEnumeratorSimple:IEnumerator,ICloneable /Methods internal ArrayListEnumeratorSimple(ArrayList list)this.list=list;this.index=-1;this.version=list._version;this.currentElement=list;public object Clone()/实现略 public virtual bool MoveNext()/实现略 public virtual void Reset()/实现略 public virtual object Current/实现略 /Fields private object currentElement;private int index;private ArrayList list;private int version;第20页/共28页.NET内置迭代器分析IEnumerable 抽象聚合类IEnumerator 抽象迭代器ArrayList 具体聚合类ArrayListEnumeratorSimple 具体迭代器第21页/共28页.NET内置迭代器应用实例using System;using System.Collections;namespace IteratorSample class Program static void Process(IEnumerable e)IEnumerator i=e.GetEnumerator();/创建迭代器对象创建迭代器对象 while(i.MoveNext()Console.WriteLine(i.Current.ToString();static void Main(string args)IList persons;persons=new ArrayList();/创建一个ArrayList类型的聚合对象 persons.Add(张无忌);persons.Add(小龙女);persons.Add(令狐冲);persons.Add(韦小宝);persons.Add(袁紫衣);persons.Add(小龙女);Process(persons);Console.Read();张无忌小龙女令狐冲韦小宝袁紫衣小龙女第22页/共28页迭代器模式的优缺点与适用环境模式优点支持以不同的方式遍历一个聚合对象,在同一个聚合对象上可以定义多种遍历方式简化了聚合类由于引入了抽象层,增加新的聚合类和迭代器类都很方便,无须修改原有代码,符合开闭原则第23页/共28页迭代器模式的优缺点与适用环境模式缺点在增加新的聚合类时需要对应地增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性抽象迭代器的设计难度较大,需要充分考虑到系统将来的扩展。在自定义迭代器时,创建一个考虑全面的抽象迭代器并不是一件很容易的事情第24页/共28页迭代器模式的优缺点与适用环境模式适用环境访问一个聚合对象的内容而无须暴露它的内部表示需要为一个聚合对象提供多种遍历方式为遍历不同的聚合结构提供一个统一的接口,在该接口的实现类中为不同的聚合结构提供不同的遍历方式,而客户端可以一致性地操作该接口第25页/共28页思考扩展.NET中的ArrayList类,自定义一个ReverseArrayList类,要求实现逆向遍历这个类的内部元素。第26页/共28页ENDENDENDEND第27页/共28页感谢您的观看!第28页/共28页

    注意事项

    本文(设计模式迭代器模式.pptx)为本站会员(莉***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开