3.1 组合模式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

11
关于组合模式的讨论
• 透明形式的组合模式:在Component类中声明所有的用来管理子类对象的方法, 包括add( )、remove( ),以及getChild( )方法。优点是所有的构件类都有相同的 接口;缺点是不够安全。
12
本周课程作业
• 使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件 夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文 件TextFile、图片文件ImageFile、视频文件VideoFile。请画出类图。 如图所示是某公司的组织结构图,现采用组合设计模式来设计,请画出类图。
8
例子
• 使用组合模式设计空军指挥系统。 空军力量(Airforce)包含战斗机 (Fighter)、轰炸机(Bomber)、 运输机(Transporter)与电子侦察 机(EPlane)。战斗单位分为空军 中队(Squadron)与空军团 (Group)。各个战斗单位可以由 不同的机种组成。
9
软件设计模式与体系结构
结构型软件设计模式概述
主讲教师:陈星 助教:曾雪娥、刘艳萍等 福州大学 数学与计算机科学学院 福建省网络计算与智能信息处理重点实验室
结构型软件设计模式概述
• 动机
– 结构型软件设计模式的主要目的是将不同的类和对象组 合在一起,形成更大或者更复杂的结构体。
• 内容
– 组合模式将一个或者多个相似的对象构成组合对象。 – 适配器模式提供一种机制改变原来不适合使用的接口。 – 外观模式新建一个外观类,通过调用原有的类库中众多 的类的方式,实现外观类的所有方法。
10
关于组合模式的讨论
• 安全形势的组合模式:在Composite类中声明所有的用来管理子类对象的方法, 包括add( )、remove( )以及getChild( )方法,而在Component接口和树叶类型的对 象中不包含管理子类对象的方法。优点是安全;缺点是Component层次结构类 的超类与组合子类的接口不一致。
7
例子
• 五子棋游戏的设计类图如图3.4所示。在本类图中,还包含有用户图形界面类 CLientGUI,该类调用另外一个棋盘类Board。棋盘类的功能包括生成棋盘图形、 将棋子添加到棋盘上、重新开局与实现回放等。另外,还有两个辅助类,一个 类是棋子图形类GChessPiece,其对象代表一个实际的棋子图像,该图像可以被 添加到棋盘Board对象上;另外一个辅助类为GameOperations类,该类提供判断 棋局结果的一些矩阵方法。
2
软件设计模式与体系结构
3.1 组合模式
主讲教师:陈星 助教:曾雪娥、刘艳萍等 福州大学 数学与计算机科学学院 福建省网络计算与智能信息处理重点实验室
引言
• 在图3.1中包含了计算机的所有配件。其中有独立的配件,如CPU、Memory、 Drive Controller等,也有组合的配件,如Mainboard with some Parts,还有完 整的计算机,即Whole PC,它包括本图所罗列的所有配件。因此,本图所代表 的树包括单独类型与复合类型两部分。复合数据类型是由单独类型所组成的。 思考:假设要设计一个配件销售程序实现价格查询,应如何设计?
•பைடு நூலகம்
13
例子
• 为了体现战斗单位的组成,设计了一个类,叫做AirUnit类。该类在组合模式中 为Composite类,负责组建空军单位,中队(Squadron)、空军团(Group), 或者临时组成的战斗单位。同时,按照飞机类型设计了4个抽象类Fighter、 Bomber、Transporter与EPlane。每个抽象类下面都有相应的子类,子类为具体 的机种。Squadron、Group类被设计成Composite类AirUnit的子类。AirUnit类封 装了数据类型ArrayList,该类型为具有弹性长度的List,在里面可以装在各种类 型的对象。 Squadron squadron = new Squadron(); Squadron.fight(); //调用该空军中队的所有组 成单位的fight
5
概念与机制
• 组合模式结构:
– – – – Component:为组合模式中的对象声明接口 Leaf:在组合模式中表示叶结点对象 Composite:表示组合部件 Client:通过Component接口操纵组合部件的对象。
6
例子
• 使用组合模式设计五子棋游戏。在 五子棋中只有两种棋子:黑子与白 子。使用抽象类ChessComponent给 出五子棋的构件接口。该接口带有 三个子类:BlackPiece、WhitePiece 和Composite,其中前两个类封装了 两种颜色的棋子,Composite类封装 了ArrayList类型的聚合数据结构。 每当玩家在棋盘上添加一个黑子或 者白子,则相应地产生一个黑子或 白子对象,然后将该对象存储到 Composite对象中。其目的是在棋局 结束以后,可以回放各个步骤

4
引言
• 图3.2中,最上端的接口类ComputerPart中带有getPrice( )方法,其他各子类也 都有该方法。在组合数据类Composite中封装了ArrayList数据结构。该类除了 包含抽象类ComputerPart类的接口getPrice( )以外,还有add( )、remove( )、 getChild( )等对于组合数据结构ArrayList的操作。Composite类有2个子类: MainboardPLus与WholePC,分别代表主板以及其上所带有的全部器件与整机 机盒以及其中所包含的所有器件。在MainboardPLus类中,可以使用其超类提 供的ArrayList结构添加主板上应该带有的配件。类似地,在WholePC类中可以 添加所有的配件类的对象。
相关文档
最新文档