设计模式考试复习题集锦.docx
- 文档编号:11490295
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:32
- 大小:34.63KB
设计模式考试复习题集锦.docx
《设计模式考试复习题集锦.docx》由会员分享,可在线阅读,更多相关《设计模式考试复习题集锦.docx(32页珍藏版)》请在冰豆网上搜索。
设计模式考试复习题集锦
设计模式考试复习题(含答案)
1.设计模式一般用来解决什么样的问题:
A.同一问题的不同表相
2.下列属于面向对象基本原则的是:
C.里氏代换
3.Open-Close原则的含义是一个软件实体:
A.应当对扩展开放,对修改关闭.
4.当我们想创建一个具体的对象而又不希望指定具体的类时,使用(A)模式。
A.创建型
5.要依赖于抽象不要依赖于具体。
即针对接口编程不要针对实现编程:
(D)依赖倒转原则
6.依据设计模式思想,程序开发中应优先使用的是(A)关系实现复用。
A,委派
7.设计模式的两大主题是(D)D.系统复用与系统扩展
8.单体模式中,两个基本要点(AB)和单体类自己提供单例A.构造函数私有B.唯一实例
9.下列模式中,属于行为模式的是(B)B观察者
10.“不要和陌生人说话”是(D)原则的通俗表述D.迪米特
填空题
1.软件体系结构是指一个系统的有目的的设计和规划,这个设计规划既不描述活动,也不描述系统怎样开发,它只描述系统的组成元素及其相互的交互协作。
2.一个UML模型只描述了一个系统要做什么,它并没告诉我们系统是怎么做。
3.接口是可以在整个模型中反复使用的一组行为,是一个没有属性而只有方法的类。
4.多重性指的是,某个类有多个对象可以和另一个类的一对象关联。
5.当一个类的对象可以充当多种角色时,自身关联就可能发生。
6.在泛化关系中,子类可以替代父类。
后前者出现的可以相同地方。
反过来却不成立。
7.最通常的依赖关系是一个类操作的形构中用到了另一个类的定义。
8.组成是强类型的聚集,因为聚集中的每个部分体只能属于一个整体。
9.实现的符号和继承的符号有相似之处,两者的唯一差别是实现关系用虚线表示,继承关系用实线表示。
10.设计模式中应优先使用对象组合而不是类继承。
判断题
1.适配器模式属于创建型模式结构型(F)
2.在设计模式中,“效果”只是指“原因和结果”(T)
3.设计模式使代码编制不能真正工程化(T)
4.面向对象语言编程中的异常处理,可以理解为责任链模式(T)
5.反模式就是反对在软件开发过程中使用设计模式分析:
反模式用来解决问题的带有共性的不良方法(F)
简答题
1.什么是设计模式?
设计模式目标是什么?
答:
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式是为了可重用代码、让代码更容易被他人理解,保证代码可靠性。
2.设计模式中一般都遵循的原则有什么?
答:
开闭原则、根据场景进行设计原则、优先组合原则、包容变化原则
3.“GangofFour”针对“创建优秀面向对象设计”建议了哪些策略?
答:
针对接口编程、优先使用对象组合而不是类继承,找到并封装变化点。
4.面向对象系统中功能复用的两种最常用技术是什么?
答:
类继承和对象组合,类继承允许你根据其他类的实现来定义一个类的实现。
父类的内部细节对子类可见。
类继承是在编译时刻静态定义的,且可直接使用,类继承可以较方便地改变被复用的实现。
对象组合是类继承之外的另一种复用选择。
新的更复杂的功能可以通过组装或组合对象来获得。
对象组合要求被组合的对象具有良好定义的接口。
5.只根据抽象类中定义的接口来操纵对象有什么好处?
答:
1)客户无须知道他们使用对象的特定类型,只须对象有客户所期望的接口。
2)客户无须知道他们使用的对象是用什么类来实现的,他们只须知道定义接口的抽象类。
五、应用题(分值15)
公司架构:
经理、工程师、技师和后勤人员都是公司的雇员,经理管理工程师、技师和后勤人员。
高层经理领导较低级别的经理。
典型层次图如下:
可以使用哪种设计模式实现公司的层级关系?
并说明为什么?
组合模式,第一,其公司关系架构为树形结构;第二,其表示了部分-整体关系(自己扩展)
选择题
1.在观察者模式中,表述错误的是(C)C.观察者可以改变被观察者的状态,再由被观察者通知所有观察者依据被观察者的状态进行。
2.对于违反里式代换原则的两个类,可以采用的候选解决方案错误的是:
(D)D.以上方案错误
3.下列模式属于结构型设计模式的是(AB)A.CompositeB.享元(Flyweight)模式
4.关于继承表述错误的是:
(D)D.继承本质上是“白盒复用”,对父类的修改,不会影响到子类。
5.对于依赖倒转的表述错误的是(C)C.从选项B的角度论述,一个对象可以有多个接口。
6.可以使用哪一种设计模式限制类的实例唯一?
(D)D.单体模式
7.Java数据库连接库JDBC用到哪种设计模式(B)?
B.工厂方法
8.关于运用GOF工厂方法的效果Consequences,说法不正确的是(C)有利于产品的一致性
9.在应用程序中可用哪些设计模式分离出算法?
(B)B.策略模式
9.工厂方法也称为(D)D.虚构造器
10.可以使用哪种设计模式将抽象和实现解耦,使得抽象和实现可以独自变化?
(B)桥接模式
填空题
1.面向对象的七条基本原则包括:
开闭原则,里式代换原则,合成聚合原则以及(迪米特法则),(依赖倒转),(单一原则),(接口隔离)。
2.在存在继承关系的情况下,方法向(超类)方向集中,而数据向(子类)方向集中。
3.适配器模式,分为类的适配器和对象的适配器两种实现。
其中类的适配器采用的是(继承)关系,而对象适配器采用的是(组合聚合)关系。
4.设计模式的四个基本要素是(名字),(意图),(问题)和(解决方案)。
5创建型模式的根本意图是要把(对象的创建)和(使用分离)的责任进行分离,从而降低系统的(耦合度)。
6.工厂模式分为(简单工厂),(工厂方法),(抽象工厂)三种类型。
7.门面模式是(迪米特)法则的典型运用
8.MVC模型的基本工作原理是基于(观察者)模式,实现是基于(命令)模式
9.设计模式的思想根源是(开闭)基本原则的宏观运用,本质上是没有任何模式的,发现模式的人永远是大师,而死守模式的人,最多只能是一个工匠.
1.在MVC模型中M、V、C分别指什么?
简述它们之间的关系?
M:
模型(Model),V:
视图(View)C:
控制Controller)。
MVC模式的目的就是实现Web系统的职能分工。
Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。
View层用于与用户的交互,通常用JSP来实现。
Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。
2.什么是开闭原则?
软件实体应当对扩展开放,对修改关闭,软件系统中包含的各种组件,例如模块(Modules)、类(Classes)以及功能(Functions)等,应该在不修改现有代码的基础上,引入新功能。
开闭原则中“开”,是指对于组件功能的扩展是开放的,是允许对其进行功能扩展的;
开闭原则中“闭”,是指对于原有代码的修改是封闭的,即不应该修改原有的代码。
3.设计数据库的系统日志,要考虑使用哪些设计模式?
答:
命令模式,备忘录模式,外观模式
4.使用工厂模式的主要原因是什么?
工厂模式定义:
提供创建对象的接口.因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如Aa=newA()工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
5.在面向对象设计中,《编译原理》的有限状态机可以什么样解决方案完成?
猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒问:
(1)设计可能用到什么设计模式?
(2)画出其类图。
观察者模式
分析:
要有联动性,老鼠和主人的行为是被动的;考虑可扩展性,猫的叫声可能引起其他联动效应。
一、多项选择题
(1)以下是模式的基本要素的是(ABCD)
A名称
B意图
C)解决方案
D)参与者和协作者
(2)常用的描述设计模式的格式有(ABCD)
A)意图
B)动机
C)适用性
D)结构
(3)以下哪些问题通过应用设计模式能够解决(AD)
A指定对象的接口
D设计应支持变化
(4)面向对象系统中功能复用的最常用技术是(AB)。
A)类继承
B)对象组合
(5)常用的基本设计模式可分为(A)。
A)创建型、结构型和行为型
(6)以下关于创建型模式说法正确的是(A)。
A)创建型模式关注的是对象的创建
(7)以下属于创建型模式的是(AC)。
A)抽象工厂(AbstractFactory)模式C)单例(Singleton)模式
(8)(C)模式是利用一个对象,快速生成一批对象。
C)原型(Prototype)模式
(9)在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进行交互。
主要体现在(AD)。
A)适配器(Adapter)模式
D)桥接(Bridge)模式
(10)结构型模式中最体现扩展性的几种模式是(C)C)装饰(Decorator)模式
(11)行为类模式使用(C)在类间分派行为。
C)对象组合
(12)以下属于行为对象模式的是(ABCD)
A)模板(TemplateMethod)模式
B)迭代器(Iterator)模式
C)命令(Command)模式
D)观察者(Observer)模式
(13)封装分布于多个类之间的行为的模式是(C)
C)访问者(Visitor)模式
(14)Observer(观察者)模式适用于(C)。
(C)当一个对象必须通知其它对象,而它又不能假定其它对象是谁。
也就是说你不希望这些对象是紧耦合的。
(15)Java的异常处理机制可理解为哪一种行为模式(C)。
C)职责链(ChainofResponsibility)模式
二、填空题(分值20)
1.(单一职责)原则的核心思想是系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成。
2.(开闭)原则的核心思想是一个对象对扩展开放,对修改关闭;实现此原则的关键就在于(抽象)、分离出(扩展)部分和(修改)部分。
3.(里氏替换)原则的核心思想是在任何父类出现的地方都可以用它的子类来替代。
4.(依赖倒置)原则的核心思想是要依赖于抽象,而不要依赖于具体的实现。
5.(接口隔离)原则的核心思想是不应该强迫客户程序依赖于他们不用的方法。
即一个接口不需要提供太多的行为,应该只提供一种对外的功能,不应该把所有的操作都封装在一个接口中。
6.(迪米特)原则的核心思想是一个对象应当对其它对象尽可能少的了解。
或者说,只和你的朋友说话。
这样一些对象可以看做朋友:
当前对象本身、通过方法的参数传递进来的对象、当前对象所创建的对象、当前对象的实例变量所引用的对象和方法内所创建或者实例化的对象。
7.(优先使用组合)原则的核心思想是优先使用组合而非继承。
8.设计模式应该面向(对象)编程
三、判断题(分值10)
1.单一职责原则表现在面向对象的程序中就是“高内聚、低耦合”。
(T)
2.设计模式只能遵从使用,不能也无需创新。
(F)
3.在面向对象编程时,无论何时何地都要使用GoF所给出的设计模式,这样编写的代码才比较好。
(F)
4.工厂方法能够提高内聚性,松散耦合,并且有助于测试。
(F)
5.对象要么构造其它对象,要么使用其它对象,绝不要两者兼顾。
(T)
问答题
1、单例模式的两种实现方法,并说明优缺点?
(1)懒汉式,在类被加载时,唯一的实例已经被创建。
这个模式在java中很容易实现,在其他语言中很难.
(2)饿汉式,在类加载的时候不创建单例实体。
只有在第一次请求实例的时候创建,并且只在第一次创建后不再创佳该类的实例
2、什么是对象粒度?
所谓的对象粒度就是对象从抽象到具体的描述的程度。
同样一个系统,同样的需求。
两个设计师给出两种设计。
两个设计代码行数差不多,但是类的数目不同。
例如有一个对象,我可以用10行代码去构造它,我也可以用20行代码,后者比前者更为精确。
3、MVC模式是个复合模式,请写出你两种你所知道的MVC中使用的模式。
(1)观察者模式:
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
(2)策略模式:
定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
4、举例说明,适配器模式和装配器在JavaIO中的应用。
(1装饰者模式:
在由InputStream,OutputStream,Reader和Writer代表的等级结构内部,有一些流处理器可以对另一些流处理器起到装饰作用,形成新的,具有改善了的功能的流处理器。
装饰者模式是JavaI/O库的整体设计模式。
这样的一个原则是符合装饰者模式的
(2适配器模式:
在由InputStream,OutputStream,Reader和Writer代表的等级结构内部,有一些流处理器是对其它类型的流源的适配。
这就是适配器模式的应用,适配器模式应用到了原始流处理器的设计上面,构成了I/O库所有流处理器的起点。
5、在面向对象程序设计中,常常需要避免过多case语句或者if语句,请给出一种设计模式避免过多的条件分支语句,同时指出这种设计模式如何帮助避免过多的Case语句?
访问者模式。
例如switch(pt){caseA:
break;caseB:
break;.....}
1.把每个条件作成一个类,比如A条件classA{publicvoidaccept(){//处理逻辑}}
2、然后把每个条件的处理方法都用一个类来管理.
publicclassCommonVisitor{publicvoidvisit(Aa){a.accept();}//其他条件的访问方法
publicvoidvisit(Bb){b.accept();}}
3、main里面就这样调用就行.
publicstaticvoidmain(Stirngargs[]){
CommonVisitorvisitor=newCommonVisitor();//如果是想用A条件,则visitor.visit(newA());}
这样写的好处,以后先加条件的话我只需要定义新的条件类就行,还有就是在CommonVisitor添加新条件的访问方法就行,这样就很好作到一个条件管理一个逻辑
五、应用题(分值10)
某房地产公司欲开发一套房产信息管理系统,根据如下描述选择合适的设计模式进行设计:
(1)该公司有多种房型,如公寓、别墅等,在将来可能会增加新的房型;
(2)销售人员每售出一套房子,主管将收到相应的销售消息。
如果对上述场景编程,那么上述
(1)和
(2)可能分别用到哪些设计模式?
对于描述
(1)可以选择使用工厂方法模式,对于描述
(2)可以选择使用观察者模式,本题参考类图如下所示:
选择题
1.设计模式具有的优点(A)。
A.适应需求变化
2.下图描述了一种设计模式(Client),该设计模式不可以(A)。
A.动态决定由一组对象中某个对象处理该请求
3.若系统中的某子模块需要为其它模块提供访问不同数据库系统(Oracle、SQLServer、DB2UDB等)的功能,(B)设计模式可抽象出相同的数据库访问过程;
B.装饰
4.系统中的文本显示类(TextView)和图片显示类(PictureView)都继承了组件类(Component),但希望最多只增加三个类,(B)设计模式可以实现该目的。
B.装饰
5.下面的类图表示的是哪个模式{AbstractFactory}(A)A.抽象工厂模式
6.下面的类图表示的是哪个设计模式{Subject}(D)D.观察者模式(Observer)
7.下面的类图表示的是哪个模式{Fa?
ade}(B)
B.外观模式(Facade)
8.下面的类图表明了哪个模式{Product}(D)
D.工厂方法模式(FactoryMethod)
9.下面的类图表示的是哪个设计模式{Context}(D)
D.状态模式(State)
10.下面的类图表明了哪个模式{Singleton}(C)
C.单例模式(Singleton)
二、填空题(分值20)
1.(工厂方法)模式中,父类负责定义创建对象的公共接口,子类则负责生成具体的对象。
2.(抽象工厂)模式提供一系列相关或相互依赖对象的接口而无需指定它们具体的类。
3(原型)模式用原型实例指定创建对象的种类,并且通过拷贝这些原型实例创建新的对象。
4.(单例)模式确保某一个类仅有一个实例,并自行实例化并向整个系统提供这个实例。
5.(组合)模式将对象组合成树形结构以表示“部分-整体”的层次结构。
使得用户对单个对象和组合对象的使用具有一致性。
6.(外观)模式定义了一个高层接口,这个接口使得这一子系统更加容易使用,为子系统中的一组接口提供一个一致的界面。
7.(享元)模式运用共享技术有效地支持大量细粒度的对象。
8.(责任链)模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
9.(观察者)模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
10.(模板方法)模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
三、简答题(分值30)关于设计模式,请回答:
1、什么是设计模式?
设计模式的目标是什么?
(1)、设计模式是一套被反复使用,多数人知晓的,经过分类编写的代码设计经验的总结。
(2)、目标:
为了可重用代码,让代码更容易被他人理解,保证代码可靠性。
2、设计模式具有哪三大特点?
(1)、可重用性,对相同类型问题反复出现,尽管问题的环境有不同,但解决方案有效。
(2)、可传授性,问题反复出现,解决问题的方案相同,大家都接受该解决方案。
。
(3)、名称,每个设计模式都有名称。
3、GOF设计模式常用的有几种?
GOF设计模式按照模式的目的可分为哪三类?
(1)23种;
(2)、结构型,将现存的对象结合在一起。
行为性,提供一种显得灵活变化的行为。
创建型,穿件或实例化对象
1、简述面向对象程序设计的六大基本原则?
答:
开闭原则、里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪米特法则、接口隔离原则。
2、简述什么是单例模式,以及他解决的问题,应用的环境,解决的方案,模式的本质?
答;在任何时间内只有一个类实例存在的模式。
需要有一个从中进行全局访问和维护某种类型数据的区域的环境下使用单例模式。
解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁。
解决方案就是保证一个类只有一个类实例存在。
本质就是实例共用同一块内存区域。
3、为什么面向对象的分析和设计中优先使用组合,而非继承?
答:
继承关系有很多缺点,如果合理使用组合则可以有效的避免这些缺点,使用组合关系将系统对变化的适应力从静态提升到动态,而且由于组合将已有对象组合到了新对象中,因此新对象可以调用已有对象的功能。
由于组合关系中各个对象的内部实现是隐藏的,我们只能通过接口调用,因此我们完全可以在运行期用实现了同样接口的另外一个对象来代替原对象,从而灵活实现运行期的行为控制。
而且使用合成关系有助于保持每个类的职责的单一性,这样类的层次体系以及类的规模都不太可能增长为不可控制的庞然大物。
在下面的C++代码中,类SalesTicket能够完成打印票据正文的功能,阐述采用该设计模式
该代码采用装饰(Decorator)设计模式实现。
采用该设计模式的目的能够动态地给一个对象增加一些新的职责不不需要采用生成子类的方法。
可以让客户选择给该类对象附加新的功能的时机以及是否增加新职责。
比生成子类的方法更为灵活。
主任可以审批1万元以下的采购单,副董事长可以申批2.5万元以下的采购单,董事长可以审批10万元以下的采购单,10万元以上的采购单就需要开会决定。
选择设计模式并其类图。
责任链模式:
选择题
1.以动作和事务闻名,且以对象形式用来封:
B.命令模式
2.以下不属于创建型模式是(A)PROXY(代理)
3.以下不属于结构型模式是(D)D.SINGLETON(单例)
4、以下不属于行为型模式是(D)MEMENTO(备忘录)
5、以下意图那个是用来描述BUILDER(生成器)(B)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
6、以下意图那个是用来描述PROTOTYPE(原型)(D)D.用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
7、以下意图那个是用来描述ADAPTER(适配器)(A)将一个类的接口转换成客户希望的另外一个接口。
本模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
8.以下意图那个是用来描述BRIDGE(桥接)(B)B.将抽象部分与它的实现部分分离,使它们都可以独立地变化。
9.以下哪个意图是用来描述COMPOSITE(组合)?
(C)将对象组合成树形结构以表示部分-整体的层次结构。
10、以下那个是用来描述DECORATOR(装饰)(D)动态地给一个对象添加一些额外的职责。
11、以下意图那个是用来描述FACADE(外观)?
(A)为子系统中的一组接口提供一个一致的界面,本模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
12、以下意图那个是用来描述FLYWEIGHT(享元)(B)B.运用共享技术有效地支持大量细粒度的对象。
13、以下意图那个是用来描述PROXY(代理)(C)C.为其他对象提供一种代理以控制对这个对象的访问。
14、以下意图那个是用来描述CHAINOFRESPONSIBILITY(职责链)?
(D)D.使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
15、以下意图那个是用来描述COMMAND(命令)(A)A、将一个请求封装为一个对象;对请求排队或记录请求日志,以及支持可撤消的操作
填空题
1.(命令)模式把一个请求或操作封装到一个对象中。
2.(装饰)模式封装一些施加于某种数据结构元素之上的操作,这样修改操作不影响数据
结构。
3.(外观)模式为子系统对外提供的一组接口提供一个统一的界面。
4.(策略)模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使
算法可相互替换。
5.(观察者)模式让多个对象同时监听某一个主题对象,主题对象的变化会通知监听对象,
使得监听对象可以自动更新。
6.(适配器)模式把一个类的接口变换成客户端所期待的另一种接口
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 模式 考试 复习题 集锦