- 1、本文档共60页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
Composite模式适用于以下两种情况:
(1)表示对象的整体-部分层次结构。
(2)希望可以忽略组合对象和单个对象的不同。
Composite模式的结构如图9.9所示。模式中的元素(参与者)包括:
●?Component:部件抽象类,定义了通用的部件操作接口,例如Graphic。
●?Leaf:基本的部件实现类,对应于图形编辑器中的基本图元,如Line、Rectangle等。
●?Composite:复合部件实现类,由若干Leaf和Composite聚合而成,例如Picture。
●?Client:使用Component接口操纵部件的对象。图9.9Compostite模式结构图例如,一个GUI系统的窗口对象既可以包含按钮、文本框、复选框等各类GUI组件(Widgets)的窗口对象,也可以包含Widget容器(Widget容器包含其他的Widget组件)。如果需要刷新窗口,那么对于不同的Widget组件,如何来设计刷新方法呢?一种方案是使用更新方法update()对每一个组件进行更新,如下列代码所示:publicclassWindow{
Button[]buttons;
Menu[]menus;
TextArea[]textAreas;
WidgetContainer[]containers;
publicvoidupdate(){
if(buttons!=null)
for(intk=0;kbuttons.length;k++)
buttons[k].draw();if(menus!=null)
for(intk=0;kmenus.length;k++)
menus[k].refresh();
if(containers!=null)
for(intk=0;kcontainers.length;k++)
containers[k].updateWidgets();
}
…
}显然,采用这种方案,如果需要增加一种新的窗口组件,则必须重写update()。
一种好的方案是复用Composite设计模式。将Button、Menu等组件和窗口对象等设计为图9.10所示的结构关系。图9.10复用Composite模式结构图则update()方法代码可简化为:
publicclassWindow{
Component[]components;
publicvoidupdate(){
if(components!=null)
for(intk=0;kcomponents.length;k++)
components[k].update();
}
}为Java程序提供图形用户接口的Java图形和用户界面器件工具包awt即采用了Composite模式思想。图9.11为Java的awt包内组件设计示意图。图9.11java.awt包的结构9.3.3AbstractFactory模式
在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。AbstractFactory模式可以绕过常规的对象的创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧密耦合。该模式提供一个创建一系列相关或相互依赖对象的接口,且无需指定它们具体的类。AbstractFactory模式的目的是用于封装具体的平台,从而使应用程序可以在不同的平台上运行。先考虑一下这种情况,如果需要设计出一个可支持多种所见即所得(look-and-feel)标准的用户界面工具包,如Motif标准和Presentation标准。不同的标准使得用户界面在滚动条、窗口、按钮等界面组件呈现不同的风格。在设计和实现中不应直接对一个界面组件类硬性指定其风格,这样在实例化处理中很难改变风格。
为了解决这个问题,可以定义一个抽象的WidgetFactory类,这个类声明了一个用于创建标准窗口组件的接口。每一种标准窗口组件都有一个抽象类,而这种标准风格的窗口组件的具体实现则是由具体的实现子类来定义,如图9.12所示。图9.12Abstr
您可能关注的文档
最近下载
- 7.2+弹力(课件)-2024-2025学年八年级物理下册同步精品课堂(人教版2024).pptx VIP
- 强震球:五年级《分数的意义》课件(13页)-有哪些信誉好的足球投注网站.pptx VIP
- 2023年苏州市相城区教育局招聘事业编制教师考试真题.pdf
- 混凝土课程设计无错版(中南大学).doc
- 隧道专业英汉词.doc
- 《项目管理精华:给非职业项目经理人的项目管理书》读书笔记.docx
- 《柏林广场A1》练习册听力原文Lektion1-6.doc
- 人教版八年级物理下册 《弹力》课件.ppt VIP
- 重污染天气重点行业移动源应急管理技术指南及编制说明.pdf VIP
- 足浴技师礼貌礼节培训方案.pptx
文档评论(0)