作为全国计算机技术与软件专业技术资格(水平)考试高级级别之一的系统架构设计师从2009年下半年开考。在历年系统架构设计师,都包含了一定数量的设计模式试题,而且呈现逐年增加的趋势,在2012年下半年的系统架构设计师的考试中包含了一道25分的大题。Sunny参加了2009年11月份的首次系统架构设计师考试,很幸运地以湖南省第一名、全国第四名的成绩成为了第一批国家认证的系统架构设计师,。纵观每年系统架构设计师的设计模式题,以考模式应用为主,要求考生能够结合具体的应用场景来选择合适的设计模式,掌握在某个具体的场景下如何使用设计模式来进行系统设计与实现。
我将通过多篇博文来分析和讲解历年系统架构设计师考试中出现的设计模式题,“试题分析与解答”部分供大家参考,如有异议,欢迎讨论!建议大家先做做这些试题,看是否能够正确解答,如果在解答的同时能够拿出具体的设计和实现方案,我相信一定会受益匪浅!参考答案为Sunny个人所作,可能跟某些已发布的“标准答案”会有所不同,如有不同意见,欢迎与我交流!
[说明:为了体现试题的真实性,每一道试题的题号均保留原始真题题号]
【全国计算机技术与软件专业技术资格(水平)考试 2009年下半年 系统架构设计师 上午试卷】
某软件公司欲开发一个Windows平台上的公告板系统。在明确用户需求后,该公司的架构师决定采用Command模式实现该系统的界面显示部分,并设计UML类图如下图所示。图中与Command模式中的“Invoker”角色相对应的类是 (30) ,与“ConcreteCommand”角色相对应的类是 (31) 。
(30) A. Command B. MenuItem C. Open D. BulktinBoardScreen
(31) A. Command B. MenuItem C. Open D. BulktinBoardScreen
某软件公司基于面向对象技术开发了一套图形界面显示构件库VisualComponent。在使用该库构建某图形界面时,用户要求为界面定制一些特效显示效果,如带滚动条、能够显示艺术字体的透明窗体等。针对这种需求,公司采用 (60) 最为灵活。
(60) A. 桥接模式 B. 命令模式 C. 组合模式 D. 装饰模式
某软件公司承接了为某工作流语言开发解释器的工作。该工作流语言由多种活动节点构成,具有类XML的语法结构。用户要求解释器工作时,对每个活动节点进行一系列的处理,包括执行活动、日志记录、调用外部应用程序等,并且要求处理过程具有可扩展能力。针对这种需求,公司采用 (61) 最为恰当。
(61) A. 适配器模式 B. 迭代器模式 C. 访问者模式 D. 观察者模式
------------------------------------------------------------------------------------------------------------------------------------------------------
试题分析与解答:
(30) - (31) 本题是命令(Command)模式的一个应用,命令模式是常用的行为型设计模式之一,它将请求发送者与请求接收者解耦,请求发送者(调用者)通过命令对象来间接引用接收者,使得系统具有更好的灵活性。本题考查考生对命令模式结构的掌握程度,在命令模式结构中,包括4个角色,分别是Invoker(请求调用者或请求发送者)、Receiver(请求接收者)、Command(抽象命令)和ConcreteCommand(具体命令)。在图中,我们不难分析出:
在本实例中,一个菜单Menu中可以包含多个MenuItem,因此,Menu是一个请求调用者的集合。当调用MenuItem的clicked()方法时,将调用注入其中的具体命令对象的execute()方法,具体命令对象再调用接收者的业务处理方法。只要向请求调用者注入不同的命令对象,就可以更换请求接收者(或请求接收者中的方法),系统具备良好的灵活性。
参考答案:B, C
(60) 根据题干,要求给图形库中的界面构件增加一些特效显示效果,还要求在增加特效时需要具有一定的灵活性,能够提供多种不同的显示特效。针对这一需求,可以选择装饰(Decorator)模式进行设计。装饰模式用于动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。Sunny在对装饰模式的讲解中给出了此题完整的设计方案和代码模拟实现,大家可以参考:扩展系统功能——装饰模式。
参考答案:D
(61) 根据题干,该软件公司需要处理的工作流语言具有类XML的语法结构,包含多个活动节点,对每个活动节点都需要进行一系列处理,而且还可能会增加新的处理过程。如果我们把工作流语言看成一个复杂的对象,活动节点就是其中所包含的成员,需要在这些成员上定义多种处理操作,而且还会增加新的处理方式,系统需要具备良好的灵活性和可扩展性。这正是访问者(Visitor)模式的模式动机。访问者模式提供一个作用于某对象结构中的各元素的操作表示,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。关于访问者模式的更多介绍,大家可以参考:操作复杂对象结构——访问者模式。学习之余,建议大家使用访问者模式来为本题提供一套设计方案。
参考答案:C
【作者:刘伟 http://blog.csdn.net/lovelion】