1、高级系统架构设计师下午试题()-1 及答案解析(总分:172.50,做题时间:90 分钟)一、试题一(总题数:1,分数:18.75)1.企业应用集成(Enterprise Application Integration,EAI)是每个企业都必须要面对的实际问题。企业服务总线(Enterprise Service Bus,ESB)是一种体系结构模式,支持通信各方间的服务交互的虚拟化和管理。它充当面向服务架构(Service-Oriented Architecture,SOA)中服务提供者和请求者之间的连接服务的中间层。与传统的 EAI技术相比,ESB 采用总线式的体系结构集成多个应用系统,基于开
2、放标准实现其内部核心功能,并支持快速加入新的应用到已有的集成环境中。请围绕“ESB 模式在企业应用集成中的应用”论题,依次从以下 3个方面进行论述。1要叙述你参与实施的企业应用集成项目(包括业务背景、组织结构、现有应用系统的分布,以及采用的技术等),以及你所担任的主要工作。2详细论述 ESB的核心功能和典型结构;列举目前流行的 ESB产品;指出你参与的项目所选择的 ESB产品,并从 ESB核心功能的角度说明选择该产品的理由。3阐述在使用 ESB技术进行应用集成过程中所遇到的问题及解决办法,简要叙述你进一步应用 ESB模式的有关设想。(分数:18.75)_二、试题二(总题数:1,分数:45.00
3、)阅读以下关于面向服务架构的应用叙述,根据要求回答问题。说明某航空公司的主要业务系统(如订票系统、航班调度系统等)始建于 20世纪七八十年代,之后随着信息化的进展,陆续积累了许多异构的遗产信息系统。这些系统部分采用了 J2EE、.NET 等技术进行开发,分布在不同的地理位置,采用不同的协议进行数据传输。近年来,该公司在企业集成方面也是煞费苦心,已经在几个主要的核心系统之间构建了用于信息集成的信息 Hub(Information Hub),其他业务应用之间也有不少点到点的集成。尽管这些企业集成技术在一定程度上增进了系统间的信息共享,但是面对历史异构的遗产信息系统,企业的业务整合、功能整合仍是困难
4、重重,主要表现如下。(1)由于大部分核心应用构建在主机之上,因此 Information Hub是基于主机技术开发,很难被开放系统使用。(2)Information Hub对事件支持不强,被集成的系统间的事件以点到点流转为主,被集成系统间耦合性强。(3)牵扯到多个系统间的业务协作以硬编码为主,将业务活动自动化的成本高,周期长,被开发的业务活动模块重用性差。某软件开发公司承接了该航空公司应用系统集成任务,项目组经过多方讨论和论证之后,决定采用以面向服务为中心的企业集成技术,一步步解决该公司所面临的企业集成问题。(分数:45.00)(1).问题 1项目组在讨论架构方案时,某位架构师提出采用企业服务
5、总线(ESB)架构模式,通过 ESB的事件服务(Event Service)完成订阅发布,使应用程序间的事件集成不再需要原来的点到点方式,从而解耦组件之间的依赖关系,降低软件系统互连的复杂性。结合你的系统架构设计经验,请用 400字以内的文字简要说明在 ESB环境中组件之间典型的交互过程,以及 ESB具有的核心功能。(分数:15.00)_(2).问题 2将彼此关联的业务活动组成自动化流程可以进一步提高该航空公司业务活动的效率。以服务为中心的企业集成通过流程服务来完成业务流程集成。结合你的系统架构设计经验,请用 300字以内的文字列举出 3种 SOA架构中的流程服务内容,并给出简要说明。(分数:
6、15.00)_(3).问题 3若项目组采用 Web Service作为基于 SOA集成方法的实现技术,请根据该航空公司目前的实际情况,用300字以内的文字说明系统应该分为哪几个层次,并简要说明每个层次的功能。(分数:15.00)_三、试题三(总题数:1,分数:45.00)阅读以下关于设计模式应用的叙述,根据要求回答问题。说明某软件公司承接了一项面向儿童的模拟游戏软件的开发任务,该游戏软件主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。游戏软件需要模拟的鸭子种类及其特征如表所示鸭子种类及其特征鸭子种类 发声特征 飞行特征 外观特征灰鸭(MallardDuck) 发出“嘎嘎”声(Quac
7、k)用翅膀飞行(FlyWithWings) 灰色羽毛红头鸭(RedHeadDuck) 发出“嘎嘎”声(Quack)用翅膀飞行(FlyWithWings)灰色羽毛、头部红色棉花鸭(CottonDuck) 不发声(QuackNoWay) 不能飞行(FlyNoWay) 白色橡皮鸭(RubberDuck)发出橡皮与空气摩擦的声音(Squeak) 不能飞行(FlyNoWay)黑白橡皮颜色为支持将来能够模拟更多种类鸭子的特征,该公司架构师采用某种设计模式设计的类图如图 1所示。在图1中,类 Duck描述了抽象的鸭子,方法 fly()、quack()和 display()分别表示不同种类的鸭子都具有飞行特征
8、、发声特征和外观特征;类 FlyBehavior与 QuackBehavior分别用于表示抽象的飞行行为与发声行为。图 1(分数:45.00)(1).问题 1请用 350字以内的文字指出该公司架构师所采用的设计模式的具体名称、设计意图及其优缺点。(分数:15.00)_(2).问题 2请用 400字以内的文字指出该公司架构师所采用的设计模式的适用性,以及图 1中需要考虑哪些实现问题?(分数:15.00)_(3).问题 3设计模式在力度和抽象层次上各不相同。按设计模式的目的划分,可分为创建型、结构型和行为型 3种模式;按设计模式的范围划分,可分为类设计模式和对象设计模式两种。请将下列 AJ 标记的
9、设计模式填入到下表中的(1)(5)空缺处。(请用 AJ 答题)AAbstract Factory 模式 BAdapter 模式 CChain of Responsibility 模式DDecorator 模式 EFactory Method 模式 FFlyweight 模式GInterpreter 模式 HIterator 模式 ITemplate Method 模式JVisitor 模式设计模式空间目 的创建型 结构型 行为型类 (1) (2)范 围对 象 (3) (4) (5)(分数:15.00)_四、试题四(总题数:1,分数:18.75)2.RUP(Rational Unified Pr
10、oces)是一种软件工程过程产品,它吸取了现代软件开发中许多成功的实践。RUP把软件生存周期划分为多个循环(Cycles),每个循环生成产品的一个新的版本。每个循环依次由 4个连续的阶段(Phase)组成,每个阶段完成确定的任务。与传统的软件过程相比,基于 RUP的软件过程可以降低项目的风险,规范管理和开发流程,有效地控制资源,提高软件开发的成功率和生产率。请围绕“统一软件开发过程的应用”论题,依次从以下 3个方面进行论述。1概要叙述你参与管理和开发的软件项目及你在其中担任的主要工作,包括角色、工作内容等。2论述 RUP的核心工作流和典型的迭代策略模式,具体论述你所参与项目如何应用 RUP,在
11、项目实施过程中遇到了什么问题,如何解决。3分析与评估你在所参与项目中应用 RUP裁剪的实际开发效果,以及你进一步应用 RUP的有关设想。(分数:18.75)_五、试题五(总题数:1,分数:45.00)阅读以下关于 Java企业级应用系统开发架构的叙述,根据要求回答问题。说明某软件公司承担了某中小型企业应用软件开发任务,进度要求紧迫。为了按时完成任务,选择合适的企业应用系统开发架构非常重要。项目组在进行方案论证时,项目组成员提出了两种开发思路。(1)刘工建议采用 J2EE 5.0和 EJB 3.0进行开发。理由是 J2EE定义了标准的应用开发体系结构和部署环境,EJB 是 J2EE的基础和核心。
12、J2EE 5.0 主要目标是简化开发,相比 EJB 2.1,EJB 3.0 具有很多改进和提高。(2)杜工建议采用 Struts、Spring 和 Hibenate轻量级开源框架相结合的方式。理由是随着 Java开源项目阵营的发展壮大,一些基于 POJOs(Plan Old Java Objects)的开源框架被广泛地引入到 Java企业应用开发中来,与重量级的 EJB框架相比,这些轻量级的框架有很多优点。项目组仔细比较分析了两种方案的特点、优点和不足之处。认为杜工和刘工的建议都合理,但是从结合当前项目实际情况出发,最后决定采用杜工的建议。(分数:45.00)(1).问题 1Java企业级应用
13、框架一般被划分为 3个层次,请用 150字以内的文字说明都有哪 3个层次?功能分别是什么?(分数:15.00)_(2).问题 2请用 200字以内的文字叙述 Struts、Spring 和 Hibernate开源框架特点和结合方式。(分数:15.00)_(3).问题 3请用 200字以内的文字说明基于 Struts、Spring 和 Hibernate的轻量级框架与基于 EJB的重量级框架解决问题的侧重点有什么不同?(分数:15.00)_高级系统架构设计师下午试题()-1 答案解析(总分:172.50,做题时间:90 分钟)一、试题一(总题数:1,分数:18.75)1.企业应用集成(Enter
14、prise Application Integration,EAI)是每个企业都必须要面对的实际问题。企业服务总线(Enterprise Service Bus,ESB)是一种体系结构模式,支持通信各方间的服务交互的虚拟化和管理。它充当面向服务架构(Service-Oriented Architecture,SOA)中服务提供者和请求者之间的连接服务的中间层。与传统的 EAI技术相比,ESB 采用总线式的体系结构集成多个应用系统,基于开放标准实现其内部核心功能,并支持快速加入新的应用到已有的集成环境中。请围绕“ESB 模式在企业应用集成中的应用”论题,依次从以下 3个方面进行论述。1要叙述你参
15、与实施的企业应用集成项目(包括业务背景、组织结构、现有应用系统的分布,以及采用的技术等),以及你所担任的主要工作。2详细论述 ESB的核心功能和典型结构;列举目前流行的 ESB产品;指出你参与的项目所选择的 ESB产品,并从 ESB核心功能的角度说明选择该产品的理由。3阐述在使用 ESB技术进行应用集成过程中所遇到的问题及解决办法,简要叙述你进一步应用 ESB模式的有关设想。(分数:18.75)_正确答案:(1简要介绍你参与规划、设计、实施和管理的企业应用集成项目的基本情况(包括业务背景、组织结构、现有应用系统的分布和采用的技术等),简要说明自己在该项目中的角色、所承担的主要任务及开展的主要工
16、作。论文叙述自己参与管理和实施的企业应用集成项目应有一定的规模,自己在该项目中担任的主要工作应有一定的分量。2企业服务总线(Enterprise Service Bus,ESB)是由中间件技术实现的支持面向服务架构(SOA)的基础软件平台,支持异构环境中的服务以基于消息和事件驱动模式的交互,并且具有适当的服务质量和可管理性。ESB 技术的基本思想是,提供一种标准的软件底层架构,各种程序组件能够以服务单元的方式“插入”到该平台上运行,并且组件之间能够以标准的消息通信方式来进行交互。换而言之,ESB 是传统中间件技术与 XML、Web 服务等技术结合的产物。ESB 是一个集成平台,将现有的 IT设
17、施和应用系统暴露为服务。由于 ESB基于开放标准,企业的遗产系统使用的私有技术能够基于开放和现代的技术(例如 Web服务和消息机制等)暴露为服务。1)其核心功能包括位置透明性、传输协议转换、消息转换、消息路由、消息增强、安全,以及监控和管理7项内容(1)位置透明性(Location Transparency)。位置透明性是指当一个服务消费者与一个服务提供者通过 ESB进行通信时,服务消费者不需要知道服务提供者的实际位置,这意味着服务消费者与服务提供者之间是解耦合的。(2)传输协议转换(Transport Protocol Conversion)。当服务请求者与服务提供者采用不同的传输协议时,E
18、SB能够将基于输入传输协议格式的数据转换为不同输出传输协议格式的数据。(3)消息转换(Message Transformation)。在服务请求者和服务提供者进行交互时,ESB 基于开发标准(XLST和 XPath等)提供了将消息从一种格式转换为另外一种格式的能力。(4)消息路由(Message Router)。在实际的集成环境中,对于一个特定的输入请求消息,可能有多个应用程序参与进来作为该消息传递的目标。ESB 能够决定一个消息必须发送到哪些相关的应用程序中,处理这种逻辑的核心功能称为消息路由。(5)消息增强(Message Enhancement)。在某些情况下,可能需要为请求数据添加额外
19、的数据或转换已有的数据,在这种情况下,ESB 应该提供对外部数据的访问能力,支持用户编写客户端代码对数据进行访问和处理。(6)安全(Security)。ESB 必须支持对消息的授权和认证能力,如果输入数据可能被恶意解析,还要提供加密能力。ESB 的安全包括消息的机密性、完整性和可用性等,支持不同的安全策略与方法。(7)监控和管理(Monitor and Management)。关注 ESB的维护和管理能力。监控与管理功能包含多个方面,例如对于消息层来说,其管理主要包括管理消息队列,监控消息大小和消息队列的吞吐率等。对于 Web服务,主要包括监控每个服务是否启动和运行,在每分钟有多少调用请求,对
20、于一个 Web服务,有多少服务实例在运行等。(论文中只要给出以上 7个核心功能中的 5个即可)2)ESB提供了一个基于标准的松散应用耦合模式,在层次化的技术结构中,ESB 至少包含以下 3层(1)总线接入层:通过这一层可以使用户各种应用接入 ESB,使用 ESB的各种服务。在这一层提供对多种主流应用的接入协议支持,如 HTTP、JCA/J2C、NET 和 IBM/CICS等。同时考虑到一些客户自己定制的应用与 ESB的连接,在总线接入层提供了适配器服务。(2)核心层:提供多种企业服务总线所需的必要服务支持,在这一层除了提供总线基本服务(如分发/订阅、队列、安全服务和仲裁服务等)外,还提供了 Q
21、oS的支持(如高可用性、确保消息传输等)。(3)微流程组合/拆分或定制路由层:这一层是侧重在业务支持上。通过通用和标准的对象和服务模型,可以在这一层上定义可重用和基于业界标准的业务流程。3)目前流行的 ESB产品包括商业产品和开源产品两类(1)商业产品 IBM的 WebSphere ESB、Oracle 的 Oracle Service Bus(前身是 BEA的 AquaLogic ServiceBus)和微软的 BizTalk Server等。(2)开源产品:Mule、Apache ServiceMix、JBossESB、OpenESB 和 WSO2等。(论文中只要给出以上产品中的 4个即可
22、)4)结合项目实践经验,说明你参与管理和实施的工程项目所采用的 ESB产品,然后围绕 7个核心功能,并结合企业应用集成项目的实际特点,论述选择该 ESB产品的原因,原因的描述要具有一定的广度和深度,要客观、适当。3具体说明你参与管理和开发的项目中,使用 ESB技术进行应用集成时所遇到的问题。这些问题包含但不限于以下内容。(1)如何根据企业应用集成的需求选择合适的 ESB产品?(2)如何根据企业的具体组织结构确定集成系统的体系结构,并据此设计系统的功能分布与物理拓扑结构?(3)相关子系统之间的数据格式转换问题。(4)针对具体业务编写合适的处理逻辑并确定消息路由问题等。论述解决以上问题所采取的策略
23、、具体办法和步骤,以及它们对该工程项目后期的工作产生了哪些积极(或消极)的影响(效果和存在的问题)。论文最后可以进一步讨论你在该工程项目中获得的与 ESB应用相关的几点体会,以及在今后的工作过程中,如果碰到类似的开发项目你将如何应用这些经验或教训。对需要进一步改进的地方,应有具体的着眼点,不能泛泛而谈。4论文写作过程中值得关注的一些要点如下(全书同)。(1)整篇论文要结构合理、切中要害、陈述完整、言简意赅、语言流畅、字迹清楚,切忌对知识点的堆积、长篇大论、言之无物。(2)选择自己参与过的工程项目进行分析论述,所述项目切题真实,介绍清楚。(3)下午试卷是论述题目,问题中提到的中心内容在题目的说明
24、中都有所涉及。在答题时首先要冷静并认真阅读题目,找出和问题相关的知识点,确定考题的关键考点,这是答题的前提。(4)摘要是全文概括,千万不要写成引言。(5)围绕论文主题,对所参与的项目进行科学叙述与评价,要有具体的着眼点,不能泛泛而谈,尽可能从字里行间让阅卷者体会到你的实际工作能力、业务水平和项目实践经验。(6)在考试过程中应注意技巧,让答题的思路最大限度地符合出题的思路,避免跑题,这样容易得到阅卷老师的共鸣。(7)根据考生对所参与的项目中针对本论文主题的相关叙述与评价,可确定他(她)有无参与信息系统项目开发过程的实践经验。)解析:二、试题二(总题数:1,分数:45.00)阅读以下关于面向服务架
25、构的应用叙述,根据要求回答问题。说明某航空公司的主要业务系统(如订票系统、航班调度系统等)始建于 20世纪七八十年代,之后随着信息化的进展,陆续积累了许多异构的遗产信息系统。这些系统部分采用了 J2EE、.NET 等技术进行开发,分布在不同的地理位置,采用不同的协议进行数据传输。近年来,该公司在企业集成方面也是煞费苦心,已经在几个主要的核心系统之间构建了用于信息集成的信息 Hub(Information Hub),其他业务应用之间也有不少点到点的集成。尽管这些企业集成技术在一定程度上增进了系统间的信息共享,但是面对历史异构的遗产信息系统,企业的业务整合、功能整合仍是困难重重,主要表现如下。(1
26、)由于大部分核心应用构建在主机之上,因此 Information Hub是基于主机技术开发,很难被开放系统使用。(2)Information Hub对事件支持不强,被集成的系统间的事件以点到点流转为主,被集成系统间耦合性强。(3)牵扯到多个系统间的业务协作以硬编码为主,将业务活动自动化的成本高,周期长,被开发的业务活动模块重用性差。某软件开发公司承接了该航空公司应用系统集成任务,项目组经过多方讨论和论证之后,决定采用以面向服务为中心的企业集成技术,一步步解决该公司所面临的企业集成问题。(分数:45.00)(1).问题 1项目组在讨论架构方案时,某位架构师提出采用企业服务总线(ESB)架构模式,
27、通过 ESB的事件服务(Event Service)完成订阅发布,使应用程序间的事件集成不再需要原来的点到点方式,从而解耦组件之间的依赖关系,降低软件系统互连的复杂性。结合你的系统架构设计经验,请用 400字以内的文字简要说明在 ESB环境中组件之间典型的交互过程,以及 ESB具有的核心功能。(分数:15.00)_正确答案:(企业服务总线(Enterprise Service Bus,ESB)是由中间件技术实现的支持面向服务架构(SOA)的基础软件平台,支持异构环境中的服务以基于消息和事件驱动模式的交互,并且具有适当的服务质量和可管理性。ESB 技术的基本思想是,提供一种标准的软件底层架构,各
28、种程序组件能够以服务单元的方式“插入”到该平台上运行,并且组件之间能够以标准的消息通信方式来进行交互。一个在 ESB环境中组件之间典型的交互过程是:首先由服务请求者触发一次交互过程,产生一个服务请求消息,并将该消息按照ESB 的要求标准化,然后标准化的消息被发送给服务总线。ESB 根据请求消息中的服务名或者接口名进行目的组件查找,将消息转发至目的组件,并最终将处理结果逆向返回给服务请求者。这种交互过程不再是点对点的直接交互模式,而是由事件驱动的消息交互模式。通过这种方式,ESB 最大限度上解耦了组件之间的依赖关系,降低了软件系统互连的复杂性。连接在总线上的组件无须了解其他组件和应用系统的位置及
29、交互协议,只需要向服务总线发出请求,消息即可获得所需服务。服务总线事实上实现了组件和应用系统的位置透明和协议透明。技术人员可以通过开发符合 ESB标准的组件(适配器)将外部应用连接至服务总线,实现与其他系统的互操作。同时,ESB 以中间件的方式,提供服务容错、负载均衡、QoS 保障和可管理功能。ESB的基本核心功能归纳如下。(1)提供位置透明性的消息路由和寻址服务。(2)提供服务注册和命名的管理功能。(3)支持多种消息传递范型(如请求/响应、发布/订阅等)。(4)支持多种可以广泛使用的传输协议(即传输协议转换)。(5)支持多种数据格式及其相互转换(即多种平台下多种集成方式的支持)。(6)提供日
30、志和监控功能。)解析:(2).问题 2将彼此关联的业务活动组成自动化流程可以进一步提高该航空公司业务活动的效率。以服务为中心的企业集成通过流程服务来完成业务流程集成。结合你的系统架构设计经验,请用 300字以内的文字列举出 3种 SOA架构中的流程服务内容,并给出简要说明。(分数:15.00)_正确答案:(企业部门内部的 IT系统通过将业务活动自动化来提高业务活动的效率。但是这些部门的业务活动并不是独立的,而是和其他部门的活动彼此关联的。将彼此关联的业务活动组成自动化流程可以进一步提高业务活动的效率。以服务为中心的企业集成通过流程服务来完成业务流程集成。在业务流程集成中,粒度的业务逻辑被组合成
31、业务流程,流程服务提供自动执行这些业务流程的能力。在参考架构中,流程服务包括以下内容。(1)编排服务(Choreography Service):通过预定义的流程逻辑控制流程中业务活动的执行,并帮助业务流程从错误中恢复。(2)事务服务(Transaction Service):用于保证流程执行中的事务特性(ACID)。对于短流程,通常采用传统的两阶段提交技术;对于长流程,一般采用补偿的方法。(3)人工服务(Staff Service):用于将人工的活动集成到流程中。一方面,它通过关联的交互服务使得人工可以参与到流程执行中;另一方面,它需要管理由于人工参与带来的管理任务,如任务分派、授权和监管等
32、。)解析:(3).问题 3若项目组采用 Web Service作为基于 SOA集成方法的实现技术,请根据该航空公司目前的实际情况,用300字以内的文字说明系统应该分为哪几个层次,并简要说明每个层次的功能。(分数:15.00)_正确答案:(在采用 Web Service作为 SOA的实现技术时,根据该航空公司目前的实际情况,从功能角度考虑,该系统应该至少分为 6个层次,分别为底层传输层、服务通信协议层、服务描述层、服务层、业务流程层和服务注册层,如下表所示。Web Service各层次功能及相关标准层 次 功 能 相关标准底层传输层(Transport) 主要负责消息的传输机制HTTP、SMTP
33、、FTP 和JMS等服务通信协议层(ServiceCommunication Protocol)描述并定义服务之间进行消息传递所需的技术标准 SOAP和 REST协议服务描述层(Service Description)主要以一种统一的方式描述服务的接口与消息交换方式 WSDL服务层(Service)将遗产系统进行包装,并通过发布的 WSDL接口描述被定位和调用业务流程层(Business Process)支持服务发现、服务调用和点到点的服务调用,并将业务流程从 Web Service的底层调用抽象出来WS-BPEL(BPEL4WS)服务注册层(Service Registry)使服务提供者能够
34、通过 WSDL发布服务定义,并支持服务请求者查找所需的服务信息UDDI)解析:三、试题三(总题数:1,分数:45.00)阅读以下关于设计模式应用的叙述,根据要求回答问题。说明某软件公司承接了一项面向儿童的模拟游戏软件的开发任务,该游戏软件主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。游戏软件需要模拟的鸭子种类及其特征如表所示鸭子种类及其特征鸭子种类 发声特征 飞行特征 外观特征灰鸭(MallardDuck) 发出“嘎嘎”声(Quack)用翅膀飞行(FlyWithWings) 灰色羽毛红头鸭(RedHeadDuck) 发出“嘎嘎”声(Quack)用翅膀飞行(FlyWithWings)
35、灰色羽毛、头部红色棉花鸭(CottonDuck) 不发声(QuackNoWay) 不能飞行(FlyNoWay) 白色橡皮鸭(RubberDuck)发出橡皮与空气摩擦的声音(Squeak) 不能飞行(FlyNoWay)黑白橡皮颜色为支持将来能够模拟更多种类鸭子的特征,该公司架构师采用某种设计模式设计的类图如图 1所示。在图1中,类 Duck描述了抽象的鸭子,方法 fly()、quack()和 display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;类 FlyBehavior与 QuackBehavior分别用于表示抽象的飞行行为与发声行为。图 1(分数:45.00)(1).问
36、题 1请用 350字以内的文字指出该公司架构师所采用的设计模式的具体名称、设计意图及其优缺点。(分数:15.00)_正确答案:(依题意,在图 1中,Duck 为抽象类,描述了抽象的鸭子,方法 fly()、quack()和 display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;而类RubberDuck、MallardDuck、CottonDuck 和 RedHeadDuck分别描述具体的鸭子种类;类 Fly Behavior与QuackBehavior为抽象类,分别用于表示抽象的飞行行为与发声行为;类 Fly NoWav与 Fly WithWings分别描述不能飞行的行为和
37、用翅膀飞行的行为;类 Quack、Squeak 与 QuackNoWay分别描述发出“嘎嘎”声的行为、发出橡皮与空气摩擦声的行为和不发声的行为。鉴于不同的鸭子种类只是在行为方面有所区别,且为支持将来能够模拟更多种类鸭子的特征,该公司架构师最有可能采用策略(Strategy)设计模式来设计如图 1所示的模拟鸭子游戏软件。Strategy模式定义了一组能够用来表示可能行为集合的类。这些行为可以在应用程序中使用,来修改应用程序功能。Strategy(策略)模式的设计意图是,定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,使得算法可独立于使用它的客户而变化。具体而言,该模式是一种定义一系
38、列算法的方法,从概念上看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。Strategy 模式的一般结构如图 2所示。图 2)解析:(2).问题 2请用 400字以内的文字指出该公司架构师所采用的设计模式的适用性,以及图 1中需要考虑哪些实现问题?(分数:15.00)_正确答案:(在以下情况中,应该使用 Strategy模式。(1)许多相关类只是在行为方面有所区别。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。(2)需要使用一个算法的不同变体。例如,定义了一些反映不同的空间或时间权衡的算法,当这些变体实现
39、为一个算法的类层次时,可以使用策略模式。(3)算法使用客户端未知的数据,可使用策略模式以避免暴露复杂的、与算法相关的数据结构。(4)一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的 Strategy类中以代替这些条件语句。依题意,在图 1中,需要考虑以下一些 Strategy模式实现问题。(1)定义类 Duck和类 FlyBehavior(或类 QuackBehavior)接口。这些接口必须使得类 FlyWithwings、类FlyNoWay、类 Quack、类 Squeak和类 QuackNoWay等能够有效地访问它所需要的类 Duc
40、k中的任何数据,反之亦然。一种解决办法是让类 Duck将数据放在参数中传递给类 FlyBehavior(或类 QuackBehavior)操作,也就是说,将数据发送给类 FlyBehavior(或类 QuackBehavior)。这使得类 FlyBehavior(或类QuackBehavior)和类 Duck解耦。但从另一个角度考虑,类 Duck也可能发送一些类 FlyBehavior(或类QuackBehavior)不需要的数据。另一种解决办法是让类 Duck将自身作为一个参数传递给类 FlyBehavior(或类 QuackBehavior),该类FlyBehavior(或类 QuackB
41、ehavior)再显式地向类 Duck请求数据;或者类 FlyBehavior(或类QuackBehavior)可以存储对它的类 Duck的一个引用,这样根本不再需要传递任何东西。这两种情况下,类 FlyBehavior(或类 QuackBehavior)都可以请求到它所需要的数据。但要求类 Duck必须对它的数据定义一个更为精细的接口,这将使得类 FlyBehavior(或类 QuackBehavior)和类 Duck更加紧密地耦合在一起。(2)将类 FlyBehavior(或类 QuackBehavior)作为模板参数。例如,在 C+中,可利用模板机制用一个Strategy来配置一个类。然
42、而这种技术仅当下面条件满足时才可以使用:可以在编译时选择 Strategy;它无须在运行时改变。在这种情况下,要被配置的类(如类 Duck)被定义为以一个 Strategy类作为一个参数的模板类。使用模板不再需要定义给类 FlyBehavior(或类 QuackBehavior)定义接口的抽象类。把类FlyBehavior(或类 QuackBehavior)作为一个模板参数也使得可以将一个类 FlyBehavior(或类QuackBehavior)和它的类 Duck静态地绑定在一起,从而提高效率。(3)尽量使类 FlyBehavior(或类 QuackBehavior)成为可选的对象。即使在不
43、使用额外的 FlyBehavior(或类 OuackBehayior)对象的情况下,类 Duck也还有意义,那么它还可以被简化。类 Duck在访问类FlyBehavior(或类 QuackBehavior)前先检查它是否存在,如果有,那么就使用它;如果没有,那么类Duck执行默认的行为。这种方法的好处是客户根本不需要处理 FlyBehavior(或类 QuackBehavior)对象,除非它们不喜欢默认的行为。)解析:(3).问题 3设计模式在力度和抽象层次上各不相同。按设计模式的目的划分,可分为创建型、结构型和行为型 3种模式;按设计模式的范围划分,可分为类设计模式和对象设计模式两种。请将下
44、列 AJ 标记的设计模式填入到下表中的(1)(5)空缺处。(请用 AJ 答题)AAbstract Factory 模式 BAdapter 模式 CChain of Responsibility 模式DDecorator 模式 EFactory Method 模式 FFlyweight 模式GInterpreter 模式 HIterator 模式 ITemplate Method 模式JVisitor 模式设计模式空间目 的创建型结构型行为型类(1)(2)范 围对 象(3(4(5) ) )(分数:15.00)_正确答案:(设计模式主要用于得到简洁灵活的系统设计,GoF 的书中共有 23个设计模式,这些模式可以按两个准则来分类:一是按设计模式的目的划分,可分为创建型、结构型和行为型 3种模式;二是按设计模式的范围划分,即根据设计模式是作用于类还是作用于对象来划分,可分为类设计模式和对象设计模式,如表所示。设计模式空