《迭代器与组合模式》PPT课件

《迭代器与组合模式》PPT课件

ID:36924575

大小:384.60 KB

页数:30页

时间:2019-05-11

《迭代器与组合模式》PPT课件_第1页
《迭代器与组合模式》PPT课件_第2页
《迭代器与组合模式》PPT课件_第3页
《迭代器与组合模式》PPT课件_第4页
《迭代器与组合模式》PPT课件_第5页
资源描述:

《《迭代器与组合模式》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第七章迭代器与组合模式回顾模板方法定义了算法的步骤,把这些步骤的实现延迟到子类模板方法模式为我们提供一种代码复用的重要技巧模板方法的抽象类可以定义具体方法、抽象方法和HookHook是一种方法,它在抽象类中不做事,或者只做默认的事情,子类可以选择要不要去覆盖它。2目标迭代器允许访问聚合的元素,而不需要暴露它的内部结构迭代器将遍历集合的工作封装进一个对象中当使用迭代器的时候,我们依赖聚合提供遍历迭代器提供一个通用的接口,可以遍历聚合的项,当编码使用聚合的项时,就可以使用多态机制组合模式提供一个结构,可同时包含个别对象和组合对象使用组合结构,我们能把相同操作

2、应用在组合和个别对象上。3举例两家餐厅(一家做早餐的,另一家做午餐的),由于市场竞争,餐厅进行合并,我们来分析会出现什么问题?①每家餐厅都有菜单项:②每家餐厅菜单项存储方式不同4问题分析合并前,两家餐厅的菜单项存储格式不一样5问题分析③合并后的新餐厅能够遍历菜单每一项,可以打印出所有素食菜单项我们必须实现两个不同的循环,分别处理这两个不同的菜单如果还有第三家餐厅合并进来,需要三个循环……6解决问题现在我们创建一个迭代器对象(Iterator),利用它来封装”便历集合内的每个对象的过程”。Iteratoriterator=breakfastMenu.cre

3、ateIterator();while(iterator.hasNext()){MenuItemmenuItem=(MenuItem)iterator.next();}Iteratoriterator=DinerMenu.createIterator();while(iterator.hasNext()){MenuItemmenuItem=(MenuItem)iterator.next();}遍历集合的每个对象过程封装起来!不用暴露出对象的存储形式看不到ArrayList、数组7迭代器模式它依赖于一个迭代器接口:一旦我们有了这个接口,就可以为各种对象集合

4、实现迭代器《interface》IteratorhasNext()next()removeDinerMenuIteratorhasNext()next()remove()8用迭代器改写餐厅菜单-1返回一个针对该集合的具体迭代器9用迭代器改写餐厅菜单-2不创建自己的迭代器,而是调用菜单项ArrayList的iterator()方法,获得具体迭代器。让这两家餐厅菜单类都实现Menu接口10代码每个餐厅菜单类都必须负责建立适当的具体迭代器。11运行12UML类图13定义迭代器模式定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。注意:

5、①迭代器模式让我们能游走于聚合内的每一个元素,而又不暴露其内部的表示;②把游走的任务放在迭代器上,而不是聚合上。这样简化聚合的接口和实现,也让责任各得其所。14模式结构包括四种角色①集合(Aggregate):一个接口,定义具体集合需实现的操作②具体集合(ConcreteAggregate):具体集合是实现集合接口的类的实例,具体集合按照一定结构存储对象,具体集合应当有一个方法,该方法返回一个针对该集合的具体迭代器③迭代器(Iterator):一个接口,规定遍历具体集合的方法④具体迭代器(ConcreteIterator)实现迭代器接口的类的实例15举例

6、由于只有早餐和午餐,缺乏竞争力,将咖啡厅也合并进来,供应晚餐我们使用很常见的存储结构Hashtable我们不是取得整个Hashtable的迭代器,而是取值部分的迭代器16合并餐厅代码有什么问题?17运行18问题我们发现:在合并新餐厅代码中每次有新菜单加入,我们必须加入新代码,在程序中调用三次printMenu().违背“开放-关闭”原则我们利用ArrayList将每个餐厅菜单存储进来利用迭代器遍历菜单19运行20问题我们希望午餐后提供一份甜点”子菜单”(菜单中的菜单)所有菜单123BreakfastMenuDinerMenuCafeMenuArrayLi

7、st,持有每家餐厅的菜单MenuItemMenuItemMenuItemArrayListMenuItemMenuItemMenuItemArray早餐菜单午餐菜单持有一份子菜单,但是不能直接把它赋给菜单项数组,因为类型不同。MenuItemMenuItem甜点菜单KEYMenuItemKEYMenuItem晚餐菜单Hashtable午餐菜单21解决问题我们需要某种树形结构,可以容纳菜单、子菜单和菜单项我们需要确定能够在每个菜单的各个项之间游走,而且至少像用迭代器一样方便我们能够弹性在菜单项之间游走,如:可以只遍历甜点菜单,或者可以遍历餐厅整个菜单22定

8、义组合模式定义:允许将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。