9-迭代器与组合模式-管理良好的集合_第1页
9-迭代器与组合模式-管理良好的集合_第2页
9-迭代器与组合模式-管理良好的集合_第3页
9-迭代器与组合模式-管理良好的集合_第4页
9-迭代器与组合模式-管理良好的集合_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

9迭代器与组合模式管理良好的集合对象村餐厅&对象村煎饼屋对象村餐厅&对象村煎饼屋现在我们可以在同一个地方,享用煎饼屋美味的煎饼早餐,和好吃的餐厅午餐了可好像有一点小麻烦……早餐师父午餐师父对象村餐厅&对象村煎饼屋他们想用我的煎饼屋菜单当做早餐的菜单,并用餐厅的菜单当做街区的菜单。我们大家都同意这样实现菜单项…………但是我们无法同意菜单的实现。那个小丑使用ArrayList记录菜单项,而我用数组。我们都不愿意改变自己,毕竟我们有太多的依赖对象村餐厅&对象村煎饼屋检查菜单项对象村餐厅&对象村煎饼屋为方便扩展菜单,我采用ArrayList对象村餐厅&对象村煎饼屋为控制菜单的长度,并且取菜单项时直接定位,不用转型,所以我选用真正的数组对象村餐厅&对象村煎饼屋女招待员打印出菜单上的每一项:存在什么样的问题?对象村餐厅&对象村煎饼屋对象村餐厅&对象村煎饼屋可否不改变自身的实现,而让他们的菜单实现一个相同的接口,这样一来,就可以最小化女招待代码中的具体引用,同时还能摆脱遍历这两个菜单所需的多个循环。对象村餐厅&对象村煎饼屋让我们一起来看一下遍历过程:要遍历早餐项,我们使用ArrayList的size()和get()方法for(inti=0;i<breakfastItems.size();i++){MenuItem

menuItem=(MenuItem)breakfastItems.get(i);}要遍历午餐项,我们使用数组的length字段和下标值:for(inti=0;i<lunchItems.length;i++){MenuItem

menuItem=lunchItems[i];}对象村餐厅&对象村煎饼屋应用在ArrayList上:Iterator

iterator=breakfastMenu.createIterator();While(iterator.hasNext()){MenuItem

menuItem=(MenuItem)iterator.next();}现在我们创建一个迭代器(Iterator)对象,利用它来封装“遍历集合内的每个对象的过程”:应用在数组上:Iterator

iterator=lunchMenu.createIterator();While(iterator.hasNext()){MenuItem

menuItem=(MenuItem)iterator.next();}对象村餐厅&对象村煎饼屋对象村餐厅&对象村煎饼屋利用java.util.Iterator定义提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。迭代器模式迭代器模式意图提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。迭代器模式结构图迭代器模式结构图各角色解析:Iterator:定义访问和遍历元素的接口ConcreteIterator:具体迭代器,实现迭代器接口,对该聚合遍历时跟踪当前位置Aggregate:聚合,定义创建相应迭代器对象的接口ConcreteAggregate:具体聚合,其工作是实现相应迭代器的接口,返回具体迭代器的一个适当的实例迭代器模式适用场景:访问一个聚合对象的内容而无需暴露它的内部表示支持对聚合对象的多种遍历为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代)迭代器模式缺点:和集合密切相关,限制了其广泛使用优点:1、支持以不同的方式遍历一个聚合2、简化了聚合的接口3.可同时进行多个遍历迭代器模式--体现的设计原则设计原则“单一职责原则”一个类应该只有一个引起变化的原因迭代器模式——进一步思考对象村将对象村咖啡厅也合并进来,供应晚餐菜单试问:如何利用迭代器模式解决这个问题?迭代器模式作业公共汽车售票员工作的场景售票员不管上来的是人还是物(行李),不管是中国人还是外国人,不管是内部员工还是别的,只要是来乘车的乘客,就必须要买票。也就是说,当我们需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑用迭代子模式。迭代器模式公共汽车售票员工作的场景另外,售票员从车头到车尾来售票,也可以从车尾向车头来售票,也就是说,当我们需要对聚集有多种方式遍历时,可以考虑用迭代器模式。由于不管乘客是什么,售票员的做法始终是相同的,都是从第一个开始,下一个是谁,是否结束,当前售到哪一个人了,这些方法每天他都在做,也就是说,当遍历不同的聚集结构提供如开始、下一个、是否结束,当前哪一项等统一的。迭代器模式假定输出结果如下,试在IDE工具中给出其代码:组合模式在对象村餐厅中,如果我们希望加一份餐后甜点,怎么办?组合模式组合模式比如:卖电脑的商家,可卖单独配件也可卖组装整机比如:复制文件,可一个一个文件复制粘贴也可整个文件夹进行复制比如:文本编辑,可给单个字加粗、变色、改字体,亦可以整段文字做同样的操作定义允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。组合模式组合模式意图将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式结构图组合模式结构图各角色解析:Component:为组合中的对象声明接口Leaf:在组合中表示没有子结点的叶结点组合模式适用场景:希望把对象表示成部分-整体层次结构希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中所有对象组合模式缺点:限制了接口的影响范围优点:1、定义了包含基本对象和组合对象的类层次结构2、简化客户代码3.使得增加新类型的组件更加容易组合模式作业公司管理系统背景:某一公司在北京有总部,在全国各大城市设有分公

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论