zhjrGoF结构型模式组合模式.ppt

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
zhjrGoF结构型模式组合模式.ppt

《设计模式》 GoF-结构型模式 4.1 Adapter Pattern(适配器模式) 4.2 Bridge Pattern(桥接模式) 4.3 Composite Pattern(组合模式) 4.4 Decorator Pattern(装饰模式) 4.5 Facade Pattern(外观模式) 4.6 Flyweight Pattern(轻量级模式) 4.7 Proxy Pattern(代理模式) GoF-结构型模式 如果以绘图为例的话,一个文字是一个绘图元件,一个线段是一个绘图元件,而一个长方形也是一个绘图元件,这些绘图元件可以组成一个图片,如果将这个图片也视作一个绘图元件,则这么递回绘图下去,就可以组合成一个较大的、复杂的图形元件,这样的目的可以使用Composite模式来解决。 对于使用者而言,无论是文字、线段或长方形,甚至是组合后的图片元件,它们都拥有一个共同的行为,使用者基本上并不会感觉出它们之间的操作有任何的不同,您可以拖曳、放大、缩小等等,这些行为都是一致的。 对于Text、Line与Rectangle而言,Picture是一个容器,然而Picture继承Graphic类,所以它也是一个绘图元件,您可以进一步的将Picture组合至另一个Picture中,以形成较大的、复杂的图形。 组合模式的UML结构图如下所示: Component 为组合中的对象声明接口。 在适当的情况下,实现所有类共有接口的缺省行为。 声明一个接口用于访问和管理Component 的子组件。 在递归结构中定义一个接口,用于访问一个父组件,并在合适的情况下实现。 Leaf 在组合中表示叶节点对象,叶节点对象没有子节点。 在组合中定义图元对象的行为。 Composite 定义有子部件的那些部件的行为 存储子部件 在Component接口中实现与子部件有关的操作。 Client 通过Component接口操纵组合部件的对象 依此架构,您可以递归地组合图形元件,例如: 除了绘图元件之外,一些具有层次性或组合性的物件也可以使用Composite模式,像是电路元件、设备元件等等,使用Composite模式可以大大减低这些元件设计的复杂度。 最典型的当属文件夹了! Composite模式概念起来比简单,简单一点说,可以使用Composite模式来构造一个具有统一接口界面的树形的对象群,并可通过该接口访问对象群的每个对象。 我们应用Composite模式来实现文件系统的文件/目录结构: IFile:File与Folder的共通接口界面。相当于Component。 Folder:目录。目录下面有子目录,文件。相当于Composite。 File:文件。存在于目录之中。相当于Leaf。 Client类:测试类或者说使用类。 interface?IFile?{ ?? ????public?void?printName(); ?? ?? ????public?boolean?addChild(IFile?file); ????public?boolean?removeChild(IFile?file); ? ????public?ListIFile?getChildren(); ?? } ?? 泛型 ?? class File implements IFile { private String name; public File(String name) { = name; } public void printName() { System.out.println(name); } public boolean addChild(IFile file) { return false; } public boolean removeChild(IFile file) { return false; } public ListIFile getChildren() { return null; } } ?? ?? class?Folder?implements?IFile?{ ?? ????private?String?name; ?? ????private?List?IFile?childList; ?? ? ????public?Folder(String?name)?{ ?? ?????????=?name; ?? ????????this.childList?=?new?ArrayListIFile(); ?} ?? ???public?vo

文档评论(0)

2232文档 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档