《软件工程——理论、方法与实践》课件第9章.ppt

《软件工程——理论、方法与实践》课件第9章.ppt

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

酱酱 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档