【计算机_软考_真题】2010年系统架构设计师考试——设计模式试题部分

编程中常见的技术难题有哪些?

2010年系统架构设计师考试在2009年的基础上增加了一道设计模式考题,Sunny友情建议微笑:大家可以先做做这些试题,看是否能够正确解答,如果在解答的同时还能够拿出具体的设计和实现方案,我相信一定会受益匪浅!奋斗,试题分析和参考答案为Sunny个人所作,可能跟某些已发布的“标准答案”会有所不同,如有不同意见,欢迎与我交流!【说明:为了体现试题的真实性,每一道试题的题号均保留原始真题题号】
真题如下:

【全国计算机技术与软件专业技术资格(水平)考试 2010年下半年 系统架构设计师 上午试卷】

   某银行系统采用Factory Method方法描述其不同账户之间的关系,设计出的类图如下所示。其中与Factory Method中的“Creator”角色相对应的类是   (33)    ;与“Product”角色相对应的类是    (34)    。

(33) A. Bank B. Account C. Checking D. Savings

(34) A. Bank B. Account C. Checking D. Savings

   某公司欲开发一个软件系统的在线文档帮助系统,用户可以在任何一个查询上下文中输入查询关键字,如果当前查询环境下没有相关内容,则系统会将查询按照一定的顺序转发给其他查询环境。基于上述需求,采用      (59)      最为合适。

(59) A. 责任链模式 B. 桥接模式 C. 装饰模式 D. 适配器模式

   某公司欲开发一套窗体图形界面类库。该类库需要包含若干预定义的窗格(Pane)对象,例如TextPane、ListPane等,窗格之间不允许直接引用。基于该类库的应用由一个包含一组窗格的窗口组成,并需要协调窗格之间的行为。基于该类库,在不引用窗格的前提下实现窗格之间的协作,应用开发者应采用     (60)       最为合适。

(60) A.备忘录模式 B. 中介者模式 C. 访问者模式 D. 迭代器模式

   某公司开发一个文档编辑器,该编辑器允许在文档中直接嵌入图形对象,但开销很大。用户在系统设计之初提出编辑器在打开文档时必须十分迅速,可以暂时不显示当前页面以外的图形。针对这种需求,公司可以采用    (61)      避免同时创建这些图形对象。

(61) A. 代理模式 B. 外观模式 C. 桥接模式 D. 组合模式

答案

试题分析与解答:

(33) - (34) 本题更像是简单工厂(Simple Factory)模式的一个应用实例,而不是工厂方法(Factory Method)模式(因为没有工厂等级结构,只有产品等级结构,当然题目中也没有明确说用的是哪个模式,微笑)。在简单工厂模式中提供了一个工厂类,在工厂类的工厂方法中可以根据参数不同来创建不同的产品对象(在此题中,工厂方法没有参数,尴尬,所以也不是严格意义上的简单工厂模式,但与简单工厂模式最为接近),由于在简单工厂模式中用于创建实例的方法通常是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式。简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。在简单工厂模式结构中,包含3个角色,分别是:Factory或Creator(工厂角色)、Product(抽象产品角色)和ConcreteProduct(具体产品角色)。

   在图中,我们不难分析出:Bank类充当工厂角色(Factory/Creator);抽象类Account充当抽象产品角色(Product);Checking和Savings充当具体产品角色(ConcreteProduct)。

参考答案:A, B

(59) 根据题干,要求开发一个软件的在线文档帮助系统,用户可以在任何一个查询上下文(查询环境)中输入查询关键字,如果当前查询环境下没有相关内容,则系统会将查询按照一定的顺序转发给其他查询环境。透过题干,不难发现,该系统将提供多个查询环境,而且这些查询环境可以通过某种方式联系在一起,当一个查询环境不能处理请求时,将查询关键字转发给下一个查询环境。针对这一需求,我们可以选择职责链模式(Chain of Responsibility Pattern)进行设计。通过职责链模式,可避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求。将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止。在《设计模式实训教程》一书中Sunny给出了此题完整的设计方案和代码模拟实现,参考类图如下:

关于职责链模式的详细讲解,大家可以参考:请求的链式处理——职责链模式。

参考答案:A

(60) 根据题干,要求该窗体图形界面类库的应用中的多个窗格之间不允许直接引用(Sunny觉得原题中“在不引用窗格的前提下实现窗格之间的协作”改为“在窗格之间不发生直接引用的前提下实现窗格之间的协作”更合理,偷笑),根据迪米特法则,可以通过引入一个“第三者”来协调窗格之间的交互行为。因此,可以选择中介者模式(Mediator Pattern)进行设计。中介者模式通过引入一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。在《设计模式实训教程》一书中Sunny给出了此题完整的设计方案和代码模拟实现,参考类图如下:

关于中介者模式的详细讲解,大家可以参考:协调多个对象之间的交互——中介者模式。

参考答案:B

(61) 根据题干,该编辑器为了在打开文档时提高速度,可以暂时不显示当前页面以外的图形,这些图形可以使用一个占位符来代替,如果系统考虑得更完善的话,可以结合多线程来实现,一个线程显示当前页面的内容,另一个线程加载下一个(些)页面的内容。针对这一需求,可以使用代理模式(Proxy Pattern)来实现,在代理模式中,给某一个对象提供一个代理,并由代理对象控制对原对象的引用。在代理模式中引入了一个新的代理对象,代理对象可以在客户端对象和目标对象之间起到中介的作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。代理模式的类型较多,包括远程代理、缓冲代理、虚拟代理、保护代理等等,此处可以使用虚拟代理,虚拟代理通过一个消耗资源较少的对象来代表一个消耗资源较多的对象,可以在一定程度上节省系统的运行开销或者缩短数据的加载时间。关于代理模式的更多介绍,大家可以参考:代理模式(文章虽然是使用C#语言来讲解的,但所有语言中代理模式的基本原理和思想是一致的)。学习之余,建议大家使用虚拟代理来为本题提供一套设计方案。

参考答案:A

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/175346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kafka的详细安装部署

简介: Kafka是一个分布式流处理平台,主要用于处理高吞吐量的实时数据流。Kafka最初由LinkedIn公司开发,现在由Apache Software Foundation维护和开发。 Kafka的核心是一个分布式发布-订阅消息系统,它可以处理大量的消息流&#…

PHP TCP服务端监听端口接收客户端RFID网络读卡器上传的读卡数据

本示例使用设备&#xff1a;WIFI/TCP/UDP/HTTP协议RFID液显网络读卡器可二次开发语音播报POE-淘宝网 (taobao.com) <?php header("content-type:text/html;charsetGBK");set_time_limit(0); $port39169; //监听端口if(($socket socket_create(AF_INET, SOCK…

共享模型之不可变

前言 该文章后续还需要进行修改&#xff01;&#xff01; 不可变的解释是对象属性不可以更改。 在多线程下&#xff0c;格式转化使用SimpleDateFormat可能会报错。这是因为线程之间互相影响导致。 public class test {public static void main(String[] args) {SimpleDateFo…

Java进行国密SM2加密和解密实现

前言 本文讲解java进行国密sm2加密和解密实现。 国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。 SM2介绍 SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM…

抽象类-Java

抽象类 一、父类方法的不确定性二、抽象类介绍三、抽象类细节四、练习题 一、父类方法的不确定性 引入&#xff1a;对于一个动物&#xff0c;不知道它吃什么&#xff0c;比如猫吃鱼&#xff0c;兔子吃萝卜。动物类中的 eat 方法往往由它的子类去具体实现。 class Animal {pub…

qgis添加arcgis的FeatureServer

左侧浏览器-ArcGIS要素服务器-新建连接 http://sampleserver6.arcgisonline.com/arcgis/rest/services/ 展开-双击即可

sql中group by和having的使用

group by&#xff1a;按照某个字段或者某些字段进行分组。 having&#xff1a;对分组之后的数据进行再次过滤&#xff0c;having必须和group by一起用&#xff0c;且在group by后面。 比如person表如下&#xff08;以下查询均基于此表&#xff09;&#xff1a; 1.group by 用法…

XML Schema中的simpleContent 元素

XML Schema中的simpleContent 元素出现在complexType 内部&#xff0c;是对complexType 的一种扩展、或者限制。 simpleContent 元素在complexType元素内部最多只能出现1次。 simpleContent元素下面必须包含1个restriction或者extension元素。 例如&#xff0c;下面的Schema片…

为何要隐藏IP地址?网络上哪些行为需要隐藏IP和更换IP?

网络已经成为现代人生活的重要组成部分&#xff0c;人们在网络上交流、学习、娱乐、购物等。但是&#xff0c;在享受网络带来的便利时&#xff0c;我们也需要时刻保护自己的隐私和安全。其中&#xff0c;IP地址作为网络通信中的重要标识&#xff0c;如何隐藏以及在哪些情况下需…

C语言题目强化-DAY12

题型指引 一、选择题二、编程题 ★★写在前面★★ 本题库源自互联网&#xff0c;仅作为个人学习使用&#xff0c;记录C语言题目练习的过程&#xff0c;如果对你也有帮助&#xff0c;那就点个赞吧。 一、选择题 1、请阅读以下程序&#xff0c;其运行结果是&#xff08; &#x…

WPF不使用AllowsTransparency实现高性能透明背景异形窗体

前言 最近在WPF项目中使用到异形窗体结合Webbroswer组件做web界面的公告展示,当时不想太麻烦引入Cef组件,就想用自带的Webbroswer来做展示,为了美观还做了异形窗体,结果测试就杯具了,自带的Webbroswer在AllowsTransparency=“True” 模式下根本就无法显示,界面一片空白,…

CMake语法解读 | Qt6需要用到

CMake 入门CMakeLists.txtmain.cpp编译示例cmake常用参数入门 Hello CMake CMake 是一个用于配置跨平台源代码项目应该如何配置的工具建立在给定的平台上。 ├── CMakeLists.txt # 希望运行的 CMake命令 ├── main.cpp # 带有main 的源文件 ├── include # 头文件目录 …

GLM: 自回归空白填充的多任务预训练语言模型

当前&#xff0c;ChatGLM-6B 在自然语言处理领域日益流行。其卓越的技术特点和强大的语言建模能力使其成为对话语言模型中的佼佼者。让我们深入了解 ChatGLM-6B 的技术特点&#xff0c;探索它在对话模型中的创新之处。 GLM: 自回归空白填充的多任务预训练语言模型 ChatGLM-6B 技…

C++二分查找视频教程:两数之和

作者推荐 利用广度优先或模拟解决米诺骨牌 本文涉及的基础知识点 二分查找算法合集 题目 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 n…

Webhook端口中的自签名身份验证

概述 有时&#xff0c;可能需要通过 Webhook 端口从交易伙伴处接收数据&#xff0c;但该交易伙伴可能需要更多的安全性&#xff0c;而不仅仅是用于验证入站 Webhook 请求的基本身份验证用户名/密码 – 或者您可能只想在入站 Webhook 消息上添加额外的安全层。 使用 Webhook 端…

RK356x U-Boot研究所(命令篇)3.11 mmc命令的用法

平台U-Boot 版本Linux SDK 版本RK356x2017.09v1.2.3文章目录 一、命令配置二、命令定义三、命令用法3.1 mmc info3.2 mmc read/write3.3 mmc erase3.4 mmc rescan3.5 mmc part3.6 mmc dev [dev] [part]3.7 mmc list3.8 mmc hwpartition [args...]一、命令配置 .config 配置文件…

使用STM32和蓝牙模块进行无线数据传输的实践

无线数据传输在现代通信领域中具有重要的地位&#xff0c;而蓝牙技术是一种常用的无线数据传输技术。本文介绍了如何使用STM32微控制器和蓝牙模块实现无线数据传输的方案&#xff0c;包括硬件设计、蓝牙模块配置、数据发送和接收等步骤&#xff0c;并给出相应的代码示例。 一、…

Codebeamer—软件全生命周期管理轻量级平台

产品概述 Codebeamer涵盖了软件研发的生命周期&#xff0c;在一个整合的平台内支持需求管理、测试管理、软件开发过程管理以及项目管理等&#xff0c;同时具有IToperations&DevOps相关的内容&#xff0c;并支持变体管理的功能。对于使用集成的应用程序生命周期管理&#xf…

Spark升级中对log4j中的一些思考

背景 最近在做Spark版本的升级(由spark3.1升级到spark3.5)&#xff0c;其实单纯从spark升级涉及到的log4j来说&#xff0c;并没有什么能够记录的&#xff0c; 但是由于公司内部做了Spark的serveless&#xff0c;把spring和spark混在了一起&#xff0c;所以导致了不可预见的问题…

13.端点、簇、属性

源码地址&#xff1a;13.端点、簇、属性 端点&#xff08;endPoint&#xff09; 一个端点就是一个应用 一个字节编号&#xff0c;数据收和发送的基本单元&#xff0c;在模块通信的时候&#xff0c;发送模块必须指定收发双方模块的网络地址和端点。端点要使用必须要和模块里的…