ch9-迭代器模式和组合模式_第1页
ch9-迭代器模式和组合模式_第2页
ch9-迭代器模式和组合模式_第3页
ch9-迭代器模式和组合模式_第4页
ch9-迭代器模式和组合模式_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

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

文档简介

软件设计方法及设计模式,张聚礼副教授/系统分析师,迭代器模式和组合模式,9,2,一,二,三,四,五,六,比较菜单的实现,迭代器模式,迭代器和集合,定义组合模式,组合菜单,组合迭代器,主要内容,4,一、比较菜单的实现,对象村餐厅和对象村煎饼屋合并了,比较菜单的实现,(一),(二),有什么问题吗,(三),5,(一)对象村餐厅和对象村煎饼屋合并了,6,(二)比较菜单的实现,菜单项,7,(二)比较菜单的实现,8,(二)比较菜单的实现,Lou的菜单,9,(二)比较菜单的实现,10,(二)比较菜单的实现,Mel的菜单,11,(二)比较菜单的实现,12,(三)有什么问题吗,如何使用菜单呢?,13,(三)有什么问题吗,打印每份菜单上的所有项,14,(三)有什么问题吗,用循环将数组内的项一一列出来,15,(三)有什么问题吗,采用类似的手段实现其他方法,16,(三)有什么问题吗,17,二、迭代器模式,可以封装遍历吗?,认识迭代器模式,(一),(二),在餐厅菜单中加入一个迭代器,(三),定义迭代器模式,单一责任,(四),(五),18,(一)可以封装遍历吗?,应该封装变化的部分,这里可以封装吗?需要使用ArrayList的size()和get()方法,19,(一)可以封装遍历吗?,需要用到数组的length和,20,(一)可以封装遍历吗?,现在,创建一个迭代器对象,21,(一)可以封装遍历吗?,用在数组上,如何呢?,22,(二)认识迭代器模式,迭代器接口,23,(二)认识迭代器模式,有了接口,就可以为各种集合实现迭代器,24,(三)在餐厅菜单中加入一个迭代器,先定义迭代器接口,25,(三)在餐厅菜单中加入一个迭代器,实现具体的迭代器,26,(三)在餐厅菜单中加入一个迭代器,改写菜单,27,(三)在餐厅菜单中加入一个迭代器,将迭代器代码整合进女招待类中,28,(三)在餐厅菜单中加入一个迭代器,测试,29,(三)在餐厅菜单中加入一个迭代器,RUN,30,(三)在餐厅菜单中加入一个迭代器,现在的设计,31,(三)在餐厅菜单中加入一个迭代器,32,(三)在餐厅菜单中加入一个迭代器,进行一些改进看看java.util.Iterator,33,(三)在餐厅菜单中加入一个迭代器,使用java.util.Iterator,34,(三)在餐厅菜单中加入一个迭代器,处理DinerMenuIterator,35,(三)在餐厅菜单中加入一个迭代器,将迭代器放入Menu接口,36,(三)在餐厅菜单中加入一个迭代器,处理Waitress,37,(三)在餐厅菜单中加入一个迭代器,现在的设计,怎么样呢?,38,(四)定义迭代器模式,迭代器模式:提供一种顺序访问集合对象中各个元素的方法,而又不暴露其内部的表示(也就是数据结构)。,39,(四)定义迭代器模式,类图,40,(五)单一责任,设计原则九:一个类应该只有一个引起变化的原因。,41,(五)单一责任,类的每个责任都有一个潜在的改变区域,多一个责任就意味着多一个改变的区域。要尽量让每个类保持单一责任。既要让每个类都保持单一的责任,也要保证一个责任只指派给一个类。内聚(Cohesion)用来度量一个类或模块紧密地达到单一目的或责任的程度。,42,(五)单一责任,现在呢?,43,(五)单一责任,这里是咖啡厅的菜单,44,(五)单一责任,45,(五)单一责任,将咖啡厅的菜单整合到我们的框架中,46,(五)单一责任,让女招待认识菜单,47,(五)单一责任,测试,48,(五)单一责任,RUN,49,(五)单一责任,我们做了什么?,50,(五)单一责任,女招待不在需要指定具体实现,51,(五)单一责任,更易于扩展,52,(五)单一责任,还有更多的集合类,53,三、迭代器和集合,迭代器和集合,(一),Java5的迭代器和集合,(二),这安全吗?,(三),54,(一)迭代器和集合,java.util.Collection接口,55,(一)迭代器和集合,56,(二)Java5的迭代器和集合,Java5增加了对遍历的支持,57,(二)Java5的迭代器和集合,例如,58,(二)Java5的迭代器和集合,现在的printMenu(),59,(二)Java5的迭代器和集合,60,(二)Java5的迭代器和集合,现在的Waitress,61,(三)这安全吗?,现在,出现了“子菜单”,62,(三)这安全吗?,菜单样式如下:,63,(三)这安全吗?,该怎么做呢?,64,(三)这安全吗?,树形结构能很好地表现现在的情况,65,(三)这安全吗?,仍然能够遍历,且更具柔性,66,四、定义组合模式,定义,类图,(一),(二),67,(一)定义,组合模式:将对象组合成树状结构来表现“整体/部分”的层级结构,让客户以一致的方式来处理个别对象以及对象组合。,68,(一)定义,树形结构在树状结构中,带有子元素的元素成为节点(Node);没有子元素的元素成为叶节点(Leaf)。,69,(一)定义,表达菜单和菜单项,70,(一)定义,可以创建任意复杂的树,71,(一)定义,可以将它视为一个整体,72,(一)定义,操作可以针对整体或部分,73,(二)类图,74,五、组合菜单,利用组合设计菜单,实现组合菜单,(一),(二),75,(一)利用组合设计菜单,76,(二)实现组合菜单,实现MenuComponent,77,(二)实现组合菜单,实现MenuItem,78,(二)实现组合菜单,79,(二)实现组合菜单,实现Menu,80,(二)实现组合菜单,实现Menu(续),81,(二)实现组合菜单,修正print()方法,82,(二)实现组合菜单,83,(二)实现组合菜单,准备测试,84,(二)实现组合菜单,菜单组合,85,(二)实现组合菜单,86,(二)实现组合菜单,RUN,87,六、组合迭代器,组合迭代器,空迭代器,(一),(二),测试,(三),88,(一)组合迭代器,要实现组合迭代器,从这里入手,89,(一)组合迭代器,90,(一)组合迭代器,组合迭代器遍历组件内的所有菜单,91,(一)组合迭代器,92,(二)空迭代器,如何实现菜单项的createIterator()方法呢?第二个选择更好,称为空迭代器,93,(二)空迭代器,实现空迭代器,94,(三)测试,实现素食菜单,95,(三)测试,96,七、总结,97,AbstractionEncapsulationPolymorphismInheritance,Encapsulatewhatvaries.Favorcompositionoverinheritence.Programtointerfaces,notimplementations.,Strategy-definesafamilyofalgorithms,encapsulateseachone,andmakestheminterchangeable.Strategyletsthealgorithmvaryindependentlyfromclientsthatuseit.,总结,OOBasics,OOPrinciples,OOPatterns,1,98,Observer-definesaone-to-manydependencybetweenobjectssothatwhenoneobjectchangesstate,allitsdependentsarenotifiedandupdatedautomatically,总结,OOPatterns,Striveforlooselycoupleddesignsbetweenobjectsthatinteract.,OOPrinciples,2,99,Decorator-Attachadditionalresponsibilitiestoanobjectdynamically.Decoratorsprovideaflexiblealternativetosubclassingforextendingfunctionality.,总结,OOPatterns,Classesshouldbeopenforextensionbutclosedformodification.,OOPrinciples,3,100,AbstractFactory-Provideaninterfaceforcreatingfamiliesofrelatedordepedentobjectswithoutspecifyingtheirconcreteclasses.FactoryMethod-Defineaninterfaceforcreatinganobject,butletsubclassesdecidewhichclasstoinstantiate.FactoryMethodletsaclassdeferinstantiationtothesubclasses.,总结,OOPatterns,Dependonabstractions.Donotdependonconcreteclasses.,OOPrinciples,4,101,Singleton-ensuresaclasshasonlyoneinstance,andprovidesaglobalpointofaccesstoit.,总结,OOPatterns,5,102,Command-Encapsulatesarequestasanobject,therebylettingyouparameterizeclientswithdifferentrequests,queueorlogrequests,andsupportundoableoperations.,总结,OOPatterns,6,103,Adapter-convertstheinterfaceofaclassintoanotherinterfacetheclientsexpect.Adapterletsclassesworktogetherthatcouldntotherwisebecauseofincompatibleinterfaces.Facade-Providesaunifiedinterfacetoasetofinterfacesinasubsystem.Facadedefinesahigher-levelinterfacethatmakesthesubsystemeasiertouse.,总结,OOPatterns,Onlytalktoyourfriends,OOPrinciples,7,104,TemplateMethod-Definetheskeletonofanalgorithminanoperation,deferringsomestepstosubclasses.TemplateMethodletssubclassesredefinecertainstepsofanalgorithmwithoutchangingthealgorithmsstructure.,总结,OOPatterns,Dontcallus,wellcallyou.,OOPrinciples,8,105,Iterator-Provideawaytoaccesstheelementsofanaggregateobjectsequentiallywithoutexposingits

温馨提示

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

评论

0/150

提交评论