第9章-组合模式课件

上传人:仙*** 文档编号:241648204 上传时间:2024-07-12 格式:PPT 页数:35 大小:758KB
返回 下载 相关 举报
第9章-组合模式课件_第1页
第1页 / 共35页
第9章-组合模式课件_第2页
第2页 / 共35页
第9章-组合模式课件_第3页
第3页 / 共35页
点击查看更多>>
资源描述
第第9章章 组合组合/合成模式合成模式(Composite)从从前前有有个个山山,山山里里有有个个庙庙,庙庙里里有有个个老老和和尚尚在在给给小小和和尚尚讲讲故故事事,讲讲的的什什么么故故事事呢呢?从从前前有有个个山山,山山里里有有个个庙庙。奶奶奶奶的的故故事事要要循循环环多多少少次次,根根据据你你多多长长时时间间睡睡着着而而定定。在在故事中有山、有庙、有和尚、有故事故事中有山、有庙、有和尚、有故事从和尚的故事谈起从和尚的故事谈起从和尚的故事谈起从和尚的故事谈起组合模式组合模式组合模式定义组合模式定义将将对对象象组组合合成成树树形形结结构构以以表表示示“整整体体-部部分分”的的结结构构层层次次。组组合合模模式式对对单单个个对对象象(即即叶叶子子对对象象)和和组组合合对对象象(即即容容器器对对象象)的的使用具有一致性使用具有一致性应用组合模式来解决的思路应用组合模式来解决的思路引引入入一一个个抽抽象象组组件件对对象象,作作为为组组合合对对象象和和叶叶子子对对象的父对象象的父对象用用户户使使用用时时,不不区区分分是是在在操操作作组组合合对对象象或或是是叶叶子子对对象象,即即对对单单个个对对象象和和组组合合对对象象的的使使用用具具有有一一致致性性组合模式组合模式UML类图类图 Component抽象组件对象抽象组件对象为为组组合合中中的的对对象象声声明明接接口口,让让客客户户端端可可以以通通过过这这个个接接口口来来访访问问和和管管理理整整个个对对象象结结构构,可可以以在在里里面面为定义的功能提供缺省的实现为定义的功能提供缺省的实现Leaf 叶子叶子节点对象节点对象定定义义和和实实现现叶叶子子对对象象的的行行为为,不不再再包包含含其其它它的的子子节点对象节点对象Composite组合对象组合对象通通常常会会存存储储子子组组件件,定定义义包包含含子子组组件件的的那那些些组组件件的的行行为为,并并实实现现在在组组件件接接口口中中定定义义的的与与子子组组件有关的操作件有关的操作。Client 通过通过Component接口操纵组合部件的组件对象。接口操纵组合部件的组件对象。组合模式分析组合模式分析组组合合模模式式的的关关键键是是定定义义一一个个抽抽象象构构件件类类。客客户户端端针针对对该该抽抽象象构构件件类类进进行行编编程程,无无须须知知道道它它到到底底表表示示的的是叶子还是是叶子还是组合组合,可以对其进行统一处理,可以对其进行统一处理同同时时组组合合对对象象与与抽抽象象构构件件类类之之间间还还建建立立一一个个聚聚合合关关联联关关系系,在在组组合合对对象象中中既既可可以以包包含含叶叶子子,也也可可以以包包含含组组合合对对象象,以以此此实实现现递递归归组组合合,形形成成一一个个树树形形结结构构组组合合模模式式可可以以不不提提供供父父对对象象的的管管理理方方法法,但但组组合合模模式式必必须须在在合合适适的的地地方方提提供供子子对对象象的的管管理方法(如:理方法(如:add、remove、getChild等)等)组组合合模模式式的的实实现现根根据据所所实实现现接接口口的的区区别别分分为为两种形式两种形式:安全模式和透明模式安全模式和透明模式组合模式类别组合模式类别透明组合模式透明组合模式UML在在Component里里面面声声明明所所有有的的用用来来管管理理子子类类对对象象的的方法,包括方法,包括add、remove,以及,以及getChild。好处好处:所有的构件类都有相同的接口。客户端所有的构件类都有相同的接口。客户端 可以等同可以等同的对待所有的对象。这就是的对待所有的对象。这就是透明形式透明形式的合成模式。的合成模式。缺点缺点:不够安全不够安全,因为树叶类对象和合成类对,因为树叶类对象和合成类对 象在本质象在本质上是有区别的。上是有区别的。树叶类对象不可能有下一个层次的对象,因此树叶类对象不可能有下一个层次的对象,因此add、remove以及以及getChild方法没有意义方法没有意义.在编译时期不在编译时期不会出错,而只会在运行时期才会出错会出错,而只会在运行时期才会出错。public abstractclassComponent/FieldsprotectedStringname;/ConstructorspublicComponent(Stringname)this.name=name;/MethodspublicabstractvoidAdd(Componentc);publicabstractvoidRemove(Componentc);publicabstractvoidDisplay(intdepth);public classLeaf extendsComponent/ConstructorspublicLeaf(Stringname)super(name);/MethodspublicvoidAdd(Componentc)System.out.println(Cannotaddtoaleaf);publicvoidRemove(Componentc)System.out.println(Cannotremovefromaleaf);publicvoidDisplay(intdepth)System.out.println(name);public classCompositeextends ComponentprivateArrayListchildren=newArrayList();publicComposite(stringname)super(name);publicvoidAdd(Componentcomponent)children.Add(component);publicvoidRemove(Componentcomponent)children.Remove(component);publicvoidDisplay(intdepth)System.out.println(name);foreach(Componentcomponentinchildren)component.Display(depth+2);publicclassClientpublicstaticvoidmain(Stringargs)Compositeroot=newComposite(root);root.Add(newLeaf(LeafA);root.Add(newLeaf(LeafB);Compositecomp=newComposite(CompositeX);comp.Add(newLeaf(LeafXA);comp.Add(newLeaf(LeafXB);root.Add(comp);root.Add(newLeaf(LeafC);Leafl=newLeaf(LeafD);root.Add(l);root.Remove(l);root.Display(1);安全组合模式安全组合模式UML在在Composite类类里里面面声声明明所所有有的的用用来来管管理理子子类类对对象象的的方法方法合合成成类类和和树树叶叶类类具具有有不不同同的的实实现现。因因为为树树叶叶类类型型的的对对象象根根本本没没有有管管理理子子类类对对象象的的方方法法,因因此此,如如果果客客户户端端对对树树叶叶类类对对象象使使用用这这些些方方法法时时,程程序序会会在在编编译译时期出错时期出错缺缺点点是是不不够够透透明明,因因为为树树叶叶类类和和合合成成类类将将具具有有不不同同的接口的接口public abstractclassComponent/FieldsprotectedStringname;/ConstructorspublicComponent(Stringname)this.name=name;publicabstractvoidDisplay(intdepth);public classLeaf extendsComponent/ConstructorspublicLeaf(Stringname)super(name);/MethodspublicvoidDisplay(intdepth)System.out.println(name);public classCompositeextends ComponentprivateArrayListchildren=newArrayList();publicComposite(stringname)super(name);publicvoidAdd(Componentcomponent)children.Add(component);publicvoidRemove(Componentcomponent)children.Remove(component);publicvoidDisplay(intdepth)System.out.println(name);foreach(Componentcomponentinchildren)component.Display(depth+2);publicclassClientpublicstaticvoidmain(Stringargs)Compositeroot=newComposite(root);root.Add(newLeaf(LeafA);root.Add(newLeaf(LeafB);Compositecomp=newComposite(CompositeX);comp.Add(newLeaf(LeafXA);comp.Add(newLeaf(LeafXB);root.Add(comp);root.Add(newLeaf(LeafC);Leafl=newLeaf(LeafD);root.Add(l);root.Remove(l);root.Display(1);两种实现方法的选择两种实现方法的选择安安全全性性合合成成模模式式是是指指:从从客客户户端端使使用用合合成成模模式式上上看看是是否否更更安安全全,如如果果是是安安全全的的,那那么么就就不不会会有有发发生生误误操作的可能,能访问的方法都是被支持的操作的可能,能访问的方法都是被支持的透透明明性性合合成成模模式式是是指指:从从客客户户端端使使用用合合成成模模式式上上,是是否否需需要要区区分分到到底底是是“树树枝枝对对象象”还还是是“树树叶叶对对象象”。如如果果是是透透明明的的,那那就就不不用用区区分分,对对于于客客户户而而言言,都都是是Compoent对对象象,具具体体的的类类型型对对于于客客户户端端而而言言是是透明的,是无须关心的。透明的,是无须关心的。两种实现方法的选择两种实现方法的选择对对于于合合成成模模式式而而言言,在在安安全全性性和和透透明明性性上上,会会更更看看重重透透明明性性,毕毕竟竟合合成成模模式式的的目目的的是是:让让客客户户端端不不再再区区分分操操作作的的是是树树枝枝对对象象还还是是树树叶叶对对象象,而而是是以以一一个个统一的方式来操作统一的方式来操作JSP组合页面实例组合页面实例JSP组合页面实例组合页面实例Java中的应用中的应用JDK的的AWT/Swing是是组组合合模模式式在在Java类类库库中中的的一一个个典典型型实实际际应用。应用。Tomcat HttpServletRequest实现类中,组合了实现类中,组合了 org.apache.catalina.Context的实现的实现 org.apache.catalina.core.StandardContext组合模式优点组合模式优点可可以以清清楚楚地地定定义义分分层层次次的的复复杂杂对对象象,表表示示对对象象的的全全部部或或部部分分层层次次,使使得得增增加加新新构构件件也更容易。也更容易。客客户户端端调调用用简简单单,客客户户端端可可以以一一致致的的使使用用组合结构或其中单个对象组合结构或其中单个对象。组合模式优点组合模式优点定定义义了了包包含含叶叶子子对对象象和和容容器器对对象象的的类类层层次次结结构构,叶叶子子对对象象可可以以被被组组合合成成更更复复杂杂的的容容器器对对象象,而而这这个个容容器器对对象象又又可可以以被被组组合合,这这样样不不断递归下去,断递归下去,可以形成复杂的树形结构可以形成复杂的树形结构。更更容容易易在在组组合合体体内内加加入入对对象象构构件件,客客户户端端不不必因为加入了新的对象构件而更改原有代码。必因为加入了新的对象构件而更改原有代码。使使设设计计变变得得更更加加抽抽象象,对对象象的的业业务务规规则则如如果果很很复复杂杂,则则实实现现组组合合模模式式具具有有很很大大挑挑战战性性,而而且且不不是是所所有有的的方方法法都都与与叶叶子子对对象象子类都有关联。子类都有关联。增增加加新新构构件件时时可可能能会会产产生生一一些些问问题题,很很难对容器中的构件类型进行限制难对容器中的构件类型进行限制。组合模式缺点组合模式缺点需需要要表表示示一一个个对对象象整整体体或或部部分分层层次次,在在具具有有整整体体和和部部分分的的层层次次结结构构中中,希希望望通通过过一一种种方方式式忽忽略略整整体与部分的差异,可以一致地对待它们。体与部分的差异,可以一致地对待它们。让让客客户户能能够够忽忽略略不不同同对对象象层层次次的的变变化化,客客户户端端可可以以针针对对抽抽象象构构件件编编程程,无无须须关关心心对对象象层层次次结结构构的的细节。细节。对对象象的的结结构构是是动动态态的的并并且且复复杂杂程程度度不不一一样样,但但客客户需要一致地处理它们。户需要一致地处理它们。何时使用组合模式何时使用组合模式 用迭代器与组合模式对二叉树进行遍历用迭代器与组合模式对二叉树进行遍历 或写研究报告或写研究报告:合成模式在合成模式在XML Schema设计中的应用设计中的应用练习题练习题练习题练习题演演示示了了通通过过一一些些基基本本图图像像元元素素(直直线线、园园等等)以以及及一一些些复复合合图图像像元元素素(由由基基本本图图像像元元素素组组合而成)构建复杂的图形树的过程合而成)构建复杂的图形树的过程
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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