- 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
您可能关注的文档
最近下载
- 2023-2024学年人教版(新起点)四年级英语下册期末测试卷含答案.docx VIP
- 施乐 DocuPrint C5005d 5005d 彩色激光打印机中文维修手册.pdf
- 非煤矿山井巷工程施工组织设计标准 GB/T 51300-2018.docx VIP
- 2025广东江门市江海区银信资产管理有限公司招聘1人笔试备考题库及答案解析.docx VIP
- 2025广东江门市江海区金信资产管理有限公司招聘1人笔试模拟试题及答案解析.docx VIP
- 2000年《既有建筑地基基础加固技术规范》.pdf VIP
- 延安文艺专题研究知到智慧树期末考试答案题库2025年西安外国语大学.docx VIP
- 广东xx储能电站安全预评价报告.doc VIP
- 温州医科大学2022-2023学年第2学期《高等数学(下)》期末试卷(A卷)附标准答案.pdf
- 预应力张拉孔道灌浆记录表(市政).xls VIP
文档评论(0)