9-迭代器与组合模式-管理良好的集合.pptVIP

9-迭代器与组合模式-管理良好的集合.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

迭代器模式——进一步思考对象村将对象村咖啡厅也合并进来,供应晚餐菜单试问:如何利用迭代器模式解决这个问题?迭代器模式作业公共汽车售票员工作的场景售票员不管上来的是人还是物(行李),不管是中国人还是外国人,不管是内部员工还是别的,只要是来乘车的乘客,就必须要买票。也就是说,当我们需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑用迭代子模式。迭代器模式公共汽车售票员工作的场景另外,售票员从车头到车尾来售票,也可以从车尾向车头来售票,也就是说,当我们需要对聚集有多种方式遍历时,可以考虑用迭代器模式。由于不管乘客是什么,售票员的做法始终是相同的,都是从第一个开始,下一个是谁,是否结束,当前售到哪一个人了,这些方法每天他都在做,也就是说,当遍历不同的聚集结构提供如开始、下一个、是否结束,当前哪一项等统一的。迭代器模式假定输出结果如下,试在IDE工具中给出其代码:组合模式在对象村餐厅中,如果我们希望加一份餐后甜点,怎么办?***(1)当需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式(2)当需要对聚集有多种方式遍历时,可以考虑使用迭代器模式*1复杂的聚合可用多种方式进行遍历2有了迭代器的遍历接口,聚合本身就不需要类似的遍历接口了,这样就简化了聚合的接口3在同一个聚合上可以有多个遍历,每个迭代器保持它自己的遍历状态*避免环状依赖****1、基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断地递归下去。客户代码中,任何用到基本对象的地方都可以使用组合对象。2、客户可以一致地使用组合结构和单个对象。这样用户就不必关心处理的是一个叶结点还是一个组合组件。这样就大大简化了客户代码。3、新定义的Component或Leaf子类自动地与已有的结构和客户代码一起协同工作,客户程序不需因新的Component类而改变。缺点:直接使用了实现类,在面向抽象编程上是很不恰当的,与依赖倒置原则冲突。9迭代器与组合模式管理良好的集合对象村餐厅对象村煎饼屋对象村餐厅对象村煎饼屋现在我们可以在同一个地方,享用煎饼屋美味的煎饼早餐,和好吃的餐厅午餐了可好像有一点小麻烦……早餐师父午餐师父对象村餐厅对象村煎饼屋他们想用我的煎饼屋菜单当做早餐的菜单,并用餐厅的菜单当做街区的菜单。我们大家都同意这样实现菜单项…………但是我们无法同意菜单的实现。那个小丑使用ArrayList记录菜单项,而我用数组。我们都不愿意改变自己,毕竟我们有太多的依赖对象村餐厅对象村煎饼屋检查菜单项对象村餐厅对象村煎饼屋为方便扩展菜单,我采用ArrayList对象村餐厅对象村煎饼屋为控制菜单的长度,并且取菜单项时直接定位,不用转型,所以我选用真正的数组对象村餐厅对象村煎饼屋女招待员打印出菜单上的每一项:存在什么样的问题?对象村餐厅对象村煎饼屋对象村餐厅对象村煎饼屋可否不改变自身的实现,而让他们的菜单实现一个相同的接口,这样一来,就可以最小化女招待代码中的具体引用,同时还能摆脱遍历这两个菜单所需的多个循环。对象村餐厅对象村煎饼屋让我们一起来看一下遍历过程:要遍历早餐项,我们使用ArrayList的size()和get()方法for(inti=0;ibreakfastItems.size();i++){MenuItemmenuItem=(MenuItem)breakfastItems.get(i);}要遍历午餐项,我们使用数组的length字段和下标值:for(inti=0;ilunchItems.length;i++){MenuItemmenuItem=lunchItems[i];}对象村餐厅对象村煎饼屋应用在ArrayList上:Iteratoriterator=breakfastMenu.createIterator();While(iterator.hasNext()){MenuItemmenuItem=(MenuItem)iterator.next();}现在我们创建一个迭代器(Iterator)对象,利用它来封装“遍历集合内的每个对象的过程”:应用在数组上:Iteratoriterator=lunchMenu.createIterator();While(iterator.hasNext()){MenuItemmenuItem=(MenuItem)iterator.next();}对象村餐厅对象村煎饼屋

文档评论(0)

158****1986 + 关注
实名认证
文档贡献者

文档达人

1亿VIP精品文档

相关文档