某软件公司欲开发一个 Windows 平台上的公告板系统。在明确用户需求后,该公司的 架构师决定采用 Command 模式实现该系统的界面显示部分,并设计 UML 类图如下 图所示。图中与 Command 模式中的 Invoker 角色相对应的类是( ) ,与 ConcreteCommand 角色相对应的类是() 。
A.Command B.MenuItem C.Open D.ButktinBoardScreen
A.Command B.MenuItem C.Open D.BulktinBoardScreen
【解析】
Command(命令)模式是设计模式中行为模式的一种,它将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。Command 模式也支持可撤销的操作。
Command 模式的类图如下所示。
对于题目所给出的图,与 Invoker 角色相对应的类是 MenuItem,与 Concrete Command 角色相对应的类是 Open。
某软件公司基于面向对象技术开发了一套图形界面显示构件库 VisualComponent。在使用该库构建某图形界面时,用户要求为界面定制一些特效显示效果,如带滚动条、能够显示艺术字体的透明窗体等。针对这种需求,公司采用( ) 最为灵活。
A.桥接模式
B.命令模式
C.组合模式
D.装饰模式
【解析】
根据题干描述,可以看出其基础是一个图形界面,并要求为图形界面提供一些定制的特效,例如带滚动条的图形界面,能够显示艺术字体且透明的图形界面等。这要求能够动态地对一个对象进行功能上的扩展,也可以对其子类进行功能上的扩展。对照选项中的 4 种设计模式,装饰模式最符合这一要求。
某软件公司承接了为某工作流语言开发解释器的工作。该工作流语言由多种活动节点构成,具有类 XML 的语法结构。用户要求解释器工作时,对每个活动节点进行一系列的处理,包括执行活动、日志记录、调用外部应用程序等,并且要求处理过程具有可扩展能力。针对这种需求,公司采用( ) 最为恰当。
A.适配器模式
B.迭代器模式
C.访问者模式
D.观察者模式
【解析】
根据题干描述,可以看出本题的核心在于对某个具有固定结构的活动节点需要多种处理能力,且处理能力可扩展,也就是说要求在不改变原来类结构(活动节点)的基础上增加新功能。对照 4 个选项,发现访问者模式最符合要求。
某公司欲开发一个软件系统的在线文档帮助系统,用户可以在任何一个查询上下文中输 入查询关键字,如果当前查询环境下没有相关内容,则系统会将查询按照一定的顺序转 发给其他查询环境。基于上述需求,采用( )最为合适。
A.责任链模式 B.桥接模式 C.装饰模式 D.适配器模式
【解析】
本题主要考查设计模式的理解与应用。根据题干描述,在线文档系统需要根据用户的查询需求逐步将查询请求依次传递,对比 4 个候选项,其中在责任链模式里,很多对象由每一 个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对 象决定处理此请求。因此责任链模式是能够满足该要求的最好模式。
某公司欲开发一套窗体图形界面类库。该类库需要包含若干预定义的窗格(Pane)对象, 例如 TextPane、ListPane 等,窗格之间不允许直接引用。基于该类库的应用由一个包 含一组窗格的窗口组成,并需要协调窗格之间的行为。基于该类库,在不引用窗格的前 提下实现窗格之间的协作,应用开发者应采用( )最为合适。
A.备忘录模式 B.中介者模式 C.访问者模式 D.迭代器模式
【解析】
本题主要考查设计模式的理解与应用。根据题干描述,应用系统需要使用某公司开发的 类库,该应用系统是一组窗格组成,应用需要协调窗格之间的行为,并且不能引用窗格自身, 在这种要求下,对比 4 个候选项,其中中介者模式用一个中介对象封装一系列的对象交互。 中介者使用各对象不需要显式的相互调用,从而使其耦合松散。可以看出该模式最符合需求。
某公司开发一个文档编辑器,该编辑器允许在文档中直接嵌入图形对象,但开销很大。 用户在系统设计之初提出编辑器在打开文档时必须十分迅速,可以暂时不显示当前页面 以外的图形。针对这种需求,公司可以采用( )避免同时创建这些图形对象。
A.代理模式 B.外观模式 C.桥接模式 D.组合模式
【解析】
本题主要考查设计模式的理解与应用。根据题干描述,该编辑器需要在文档中嵌入显示 开销很大的图形对象,为了能够提高系统效率,需要避免同时创建这些图像。这对这些要求, 对比候选项,可以发现代理模式可以解决直接访问对象时带来的问题,例如:要访问的对象 在远程的机器上;对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问 等。因此代理模式是最为合适的设计模式。
某公司欲开发一门户网站,将公司的各个分公司及办事处信息进行整合。现决定采用 composite 设计模式来实现公司的组织结构关系,并设计了如图所示的 UML 类图。图 中与 Composite 模式中的 Component 角色相对应的类是( 1 ),与 Composite 角色 相对应的类是( 2 )。
(1) A.Company
B.Finance Department
C.HRDepartment
D.ConcreteCompany
(2) A.Company
B.Finance Department
C.HRDepartment
D.ConcreteCompany
【解析】
本题考查组合模式相关的知识。下图为组合模式的 UML 图例。与题目给出的图例进行
匹配可得出答案
【答案】A、D。
某软件公司正在设计一个通用的嵌入式数据处理平台,需要支持各种数据处理芯片之间的数据传递与交换。该平台的核心功能之一要求能够屏蔽芯片之间的数据交互,使其耦合松散,并且可以独立改变芯片之间的交互过程。针对上述需求,采用( )最为合适。
A.抽象工厂模式
B.策略模式
C.中介者模式
D.状态模式
【解析】
本题主要考查对设计模式的理解和掌握。根据题干描述,该系统需要能够支持不同芯片之间的数据交互,并能够独立改变芯片之间的数据交互过程。这种情况下,可以引入一个中介层,通过中介层屏蔽不同芯片之间的两两交互。根据上述分析,选项中列举的设计模式中,中介者模式最符合要求。
某软件公司正在设计一个图像处理软件,该软件需要支持用户在图像处理过程中的撤销和重做等动作,为了实现该功能,采用( )最为合适。
A.单例模式
B.命令模式
C.访问者模式
D.适配器模式
【解析】
根据题干描述,系统需要支持用户在图像处理过程中的撤销和重做的动作,因此可以将用户动作封装成对象,通过对象之间的传递和转换实现撤销和重做等动作。根据上述分析,选项中列举的设计模式中,命令模式最符合要求。
某互联网公司正在设计一套网络聊天系统,为了限制用户在使用该系统时发表不恰当言论,需要对聊天内容进行特定敏感词的过滤。针对上述功能需求,采用______能够灵活配置敏感词的过滤过程。
A.责任链模式
B.工厂模式
C.组合模式
D.装饰模式
【解析】
本题考查常见设计模式的特点。
Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
Chain of Responsibility:为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
Composite:将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。
Decorator:动态地给一个对象添加一些额外的职责。就扩展功能而言, 它比生成子类方式更为灵活。
依据题意,需要限制用户在使用聊天系统时发表不恰当言论,需要对聊天内容进行特定敏感词的过滤,最为关键的一点是需要灵活配置过滤关键字。如果本系统采用责任链模式,即可达到这一点。
某软件公司欲设计一款图像处理软件,帮助用户对拍摄的照片进行后期处理。在软件需求分析阶段,公司的系统分析师识别出了如下 3 个关键需求。
图像处理软件需要记录用户在处理照片时所有动作,并能够支持用户动作的撤销与重做 等行为。
图像处理软件需要根据当前正在处理的照片的不同特征选择合适的处理操作,处理操作 与照片特征之间具有较为复杂的逻辑关系。
图像处理软件需要封装各种图像处理算法,用户能够根据需要灵活选择合适的处理算 法:软件还要支持高级用户根据一定的规则添加自定义处理算法。
在系统设计阶段,公司的架构师决定采用设计模式满足上述关键需求中对系统灵活性与 扩展性的要求。
具体来说,为了支持灵活的撤销与重做等行为,采用( )最为合适;
为了封 装图像操作与照片特征之间的复杂逻辑关系,采用( )最为合适;
为了实现图像处理算法的 灵活选择与替换,采用( )最为合适。
A.工厂模式 B.责任链模式 C.中介者模式 D.命令模式
A.状态模式 B.适配器模式 C.组合模式 D.单例模式
A.模板方法模式 B.访问者模式 C.策略模式 D.观察者模式
【解析】
本题主要考查设计模式知识。题干描述了某软件公司一款图像处理软件的需求分析与设 计过程,并明确指出采用设计模式实现关键需求对系统灵活性与扩展性的要求。
针对需求 1,为了支持灵活的撤销与重做等行为,采用命令模式最为合适,因为命令模 式可以将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,还可以对 请求排队,或记录请求日志,以及支持可撤消的操作。
针对需求 2,为了封装图像操作与照片特征之间的复杂逻辑关系,采用状态模式最为合 适,因为状态模式将每一个条件分支放入一个独立的类中,这样就可以根据对象自身的情况 将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化;
针对需求 3,为了实现图像处理算法的灵活选择与替换,采用策略模式最为合适,因为 策略模式定义一系列的算法,把它们封装起来, 并且使它们可相互替换,使得算法可独立 于使用它的客户而变化。
【答案】D、A、C。
若系统中的某子模块需要为其他模块提供访问不同数据库系统的功能,这些数据库系统 提供的访问接口有一定的差异,但访问过程却都是相同的,例如,先连接数据库,再打 开数据库,最后对数据进行查询。针对上述需求,可以采用( )设计模式抽象出相同的 数据库访问过程,该设计模式( )。
(1)A.外观 B.装饰 C.桥接 D.享元
(2)A.可以动态、透明地给单个对象添加职责
B.为子系统定义了一个高层接口,这个接口使得这一子系统更加容易使用
C.通过运用共享技术,有效支持大量细粒度的对象
D.将抽象部分与它的实现部分分离,使它们都可以独立地变化
【解析】
外观(façade)模式是对象的结构模式,要求外部与一个子系统的通信必须通过一个统一 的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接 口,这个接口使得这一子系统更加容易使用。
【答案】A、B。
扩展:这个题本身出题有问题,这个场景最合适的,其实是模板方法,因为固定了流程 但没有固定里面的内容。但给出的选项中,没有这个选项,所以已然没有最合适的了。也就 这个原因才选到 A。其实如果说外观也算能行,用桥接也是可以的。把过程作为抽象,把里 面要处理的内容作为实现部分。
某系统中的文本显示类( TextView )和图片显示类( PictureView )都继承了组件类 ( Component ),分别显示文本和图片内容,现需要构造带有滚动条或者带有黑色边框, 或者既有滚动条又有黑色边框的文本显示控件和图片显示控件,但希望最多只增加 3 个类。那么采用设计模式( )可实现该需求,其优点是( )。
(1)A.外观 B.单体 C.装饰 D.模板方法
(2)A.比静态继承具有更大的灵活性
B.提高已有功能的重复使用性 C.可以将接口与实现相分离 D.为复杂系统提供了简单接口
【解析】
装饰模式:动态地给一个对象添加一些额外的职责。它提供了用子类扩展功能的一个灵 活的替代,比派生一个子类更加灵活。
在本题中,“现需要构造带有滚动条或者带有黑色边框,或者既有滚动条又有黑色边框 的文本显示控件和图片显示控件”,从此处可以看出需要能为构件灵活附加功能的机制,这 与装饰模式的情况是吻合的。这样做比静态继承具有更大的灵活性。
一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理 解。采用( )模式,用一个特定对象来封装一系列的对象交互,从而使各对象不需要显 式地相互引用,使其耦合松散,而且可以独立地改变它们之间的交互。
A.解释器(Interpreter) B.策略(Strategy) C.中介者(Mediator) D.迭代器(Iterator)
【解析】
解释器(interpreter)模式。解释器模式属于类的行为型模式,描述了如何为语言定义一个 文法,如何在该语言中表示一个句子,以及如何解释这些句子,这里的“语言”是使用规定 格式和语法的代码。解释器模式主要用在编译器中,在应用系统开发中很少用到。
策略(strategy)模式。策略模式是一种对象的行为型模式,定义一系列算法,并将每一个 算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,其目 的是将行为和环境分隔,当出现新的行为时,只需要实现新的策略类。
中介者(mediator)模式。中介者模式是一种对象的行为型模式,通过一个中介对象来封 装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其耦合松散,而且 可以独立地改变它们之间的交互。中介者对象的存在保证了对象结构上的稳定,也就是说, 系统的结构不会因为新对象的引入带来大量的修改工作。
迭代器(iterator)模式。迭代器模式是一种对象的行为型模式,提供了一种方法来访问聚 合对象,而不用暴露这个对象的内部表示。迭代器模式支持以不同的方式遍历一个聚合对象, 复杂的聚合可用多种方法来进行遍历;允许在同一个聚合上可以有多个遍历,每个迭代器保 持它自己的遍历状态,因此,可以同时进行多个遍历操作。
扩展:设计模式分类:创建型模式、结构型模式、行为型模式。
某广告公司的宣传产品有宣传册、文章、传单等多种形式,宣传产品的出版方式包括纸 质方式、CD、DVD、在线发布等。现要求为该广告公司设计一个管理这些宣传产品的 应用,采用( )设计模式较为合适,该模式()。
(1)A.Decorator B.Adapter C.Bridge D.Facade
(2)A.将一系列复杂的类包装成一个简单的封闭接口
B.将抽象部分与它的实现部分分离,使它们都可以独立地变化 C.可在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责 D.将一个接口转换为客户希望的另一个接口
【解析】
本题考点是设计模式,不同的设计模式可以应用于不同的场景,在本题题干部分提到宣 传产品有多种表现形式,又有多种媒介,如果用一棵类树来表达,必然会带来“类爆炸”(题 目中增加一种媒介,代码实现中需要增加多个类)的问题,所以使用桥接模式是合适的。桥 接模式的最核心特点便是:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
某软件公司欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。在明确用户需求后,该公司的架构师决定采用 Bridge 模式实现该软件,并设计 UML 类图如下图所示。图中与 Bridge 模式中的 Abstraction 角色相对应的类是(),与 Implementor 角色相对应的类是( )。
A.Shape B.Drawing C.Rectangle D.V2Drawing
A.Shape B.Drawing C.Rectangle D.V2Drawing
【解析】
桥接模式将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。桥接模式类似于多重继承方案,但是多重继承方案往往违背了类的单一职责原则,其复用性比较差,桥接模式是比多重继承方案更好的解决方法。
桥接模式的结构如下图所示,其中:
图中与 Bridge 模式中的“Abstraction”角色相对应的类是 Shape,与“Implementor”角
色相对应的类是 Drawing。 【答案】:A、B。
在面向对象设计的原则中、( )原则是指抽象不应该依赖予细节,细节应该依赖于抽象,即应针对接口编程,而不是针对实现编程。
A.开闭 B.里氏替换 C.最少知识 D.依赖倒置
【解析】
单一职责原则:设计目的单一的类。
开放-封闭原则:对扩展开放,对修改封闭。
李氏(Liskov)替换原则:子类可以替换父类。
依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程。
接口隔离原则:使用多个专门的接口比使用单一的总接口要好。
组合重用原则:要尽量使用组合,而不是继承关系达到重用目的。
迪米特(Demeter)原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解。
设计模式基于面向对象技术,是人们在长期的开发实践中良好经验的结晶,提供了一个 简单、统一的描述方法,使得人们可以复用这些软件设计办法、过程管理经验。按照设 计模式的目的进行划分,现有的设计模式可以分为创建型、( )和行为型三种类型。 其中( )属于创建型模式,( )属于行为型模式。( )模式可以将一个复杂的组件 分成功能性抽象和内部实现两个独立的但又相关的继承层次结构,从而可以实现接口与 实现分离。
A.合成型 B.组合型 C.结构型 D.聚合型
A.Adaptor B.Facade C.Command D.Singleton
A.Decorator B.Composite C.Memento D.Builder
A.Prototype B.Flyweight C.Adapter D.Bridge
设计模式包括:创建型、结构型、行为型三大类别。 Singleton 是单例模式,属于创建型设计模式。 Memento 是备忘录模式,属于行为型设计模式。 Bridge 是桥接模式,它的特点是实现接口与实现分离
按照设计模式的目的进行划分,现有的设计模式可以分为三类。其中创建型模式通过采用抽象类所定义的接 口,封装了系统中对象如何创建、组合等信息,其代表有( )模式等;( )模式主要用于如何组合己有的类 和对象以获得更大的结构,其代表有 Adapter 模式等;( )模式主要用于对象之间的职责及其提供服务的分 配方式,其代表有( )模式等。
A.Decorator B.Flyweight C.Command D.Singleton
A.合成型 B.组合型 C.结构型 D.聚合型
A.行为型 B.交互型 C.耦合性 D.关联型
A.Prototype B.Facade C.Proxy D.Visitor
【解析】
设计模式包括:创建型、结构型、行为型三大类别。 Singleton 是单例模式,属于创建型设计模式。 Adapter 是适配器模式,属于结构型设计模式。
Visitor 是访问者模式,属于行为型设计模式。 【答案】D、C、A、B。
设计模式描述了一个出现在特定设计语境中的设计再现问题,并为它的解决方案提供了 一个经过充分验证的通用方案,不同的设计模式关注解决不同的问题。例如,抽象工厂 模式提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类, 它是一种(54)模式;(55)模式将类的抽象部分和它的实现部分分离出来,使它们可 以独立变化,它属于(56)模式;(57)模式将一个请求封装为一个对象,从而可用不 同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作。
(54)A. 组合型 B. 结构型 C. 行为型 D. 创建型
(55)A. Bridge B. Proxy C. Prototype D. Adapter
(56)A. 组合型 B. 结构型 C. 行为型 D. 创建型
(57) A. Command B. Facade C. Memento D. Visitor
【解析】
抽象工厂模式是一种类创建型模式。
桥接模式(Bridge)-将抽象部分与它的实现部分分离,使它们都可以独立地变化,它是一种 对象结构型模式。
命令(Command)模式将一个请求封装为一个对象,从而可用不同的请求对客户进行 参数化,将请求排队或记录请求日志,支持可撤销的操作。
答案 DABA。