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