当前位置:文档之家› 软件设计模式(JAVA)习题答案

软件设计模式(JAVA)习题答案

软件设计模式(JAVA)习题答案
软件设计模式(JAVA)习题答案

软件设计模式(Java版)习题

第1章软件设计模式基础

1.1 软件设计模式概述

1.2 UML中的类图

1.3 面向对象的设计原则

一、名词解释

1.一个软件实体应当对扩展开放,对修改关闭,即在不修改源代码的基础上扩展

一个系统的行为。

2.一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。

3.在软件中如果能够使用基类对象,那么一定能够使用其子类对象。

4.是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,

使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

二、单选择题

1.( A )

2.( A )

3. ( A )

4. ( D )

5. ( D )

6.( A ) 7. ( D ) 8.( D ) 9.( D ) 10.( E )

11.( C ) 12.( C ) 13. ( A )

三、多选择题

1.( A、B、C、D ) 2. ( A、B ) 3.( A、D ) 4.( A、B、C、D ) 四、填空题

1.依赖倒转、迪米特法则、单一职责

2.模式名字、目的、问题、解决方案、效果、实例代码

3.超类、子类

4.开闭

5.用户

6.依赖倒转

7.组合/聚合

8.结构型、行为型

9.依赖倒转

10.开闭

11.需求收集是否正确、体系结构的构建是否合理、测试是否完全

12.人与人之间的交流

13.接口

14.名称、目的、解决方案

15.对象组合、类继承

16.对象组合

17.对象组合、类继承

18.抽象类的指针

五、简答题

1.答:设计模式按类型分为以下三类:

1)创建型设计模式:以灵活的方式创建对象集合,用于管理对象的创建。

2)结构型设计模式:将己有的代码集成到新的面向对象设计中,用于处理类或对象的组合。

3)行为型设计模式:用于描述对类或对象怎样交互和怎样分配职责。

2.答:设计模式的主要优点如下:

1)设计模式融合了众多专家的经验,并以一种标准的形式供广大开发人员所用,它提供了一套通用的设计词汇和一种通用的语言以方便开发人员之间沟通和交流,使得设计方案更加通俗易懂。

2)设计模式使人们可以更加简单方便地复用成功的设计和体系结构,将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。设计模式使

得重用成功的设计更加容易,并避免那些导致不可重用的设计方案。

3)设计模式使得设计方案更加灵活,且易于修改。

4)设计模式的使用将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本。

5)设计模式有助于初学者更深入地理解面向对象思想,一方面可以帮助初学者更加方便地阅读和学习现有类库与其他系统中的源代码,另一方面还可以提高软件

的设计水平和代码质量。

3.答:设计模式一般有如下几个基本要素:模式名称、问题、目的、解决方案、效果、

实例代码和相关设计模式,其中的关键元素包括模式名称、问题、解决方案和效果。

4.答:正确使用设计模式具有以下优点:

⑴可以提高程序员的思维能力、编程能力和设计能力。

⑵使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从

而缩短软件的开发周期。

⑶使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。

5.答:根据类与类之间的耦合度从弱到强排列,UML中的类图有以下几种关系:依赖关

系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中泛化和实现的耦合

度相等,它们是最强的。

6.答:1)开闭原则(OCP):它要求软件实体应当对扩展开放,对修改关闭;

2)里氏替换原则(LSP):它要求继承必须确保超类所拥有的性质在子类中仍然成立;

3)依赖倒置原则(DIP):它要求软件设计要面向接口编程,不要面向实现编程;

4)单一职责原则(SRP):它要求对象不应该承担太多职责,一个类应该有且仅有一个引起它变化的原因;

5)接口隔离原则(ISP):它要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法;

6)迪米特法则(LoD):它要求如果两个软件实体无须直接通信,就不应当直接相互调用,而通过第三方转发该调用;

7)合成复用原则(CRP):它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。

第2章创建型模式(上)

2.2 单例模式

2.3 原型模式

一、单选择题

1.( A )

2.( B )

3. ( A )

4. ( D )

5. ( C )

6.( B ) 7. ( B )

二、多选择题

1.( C )

2. ( A,B )

3.( A、B )

4. ( A、B、C )

5.( A、C ) 6.( A、B、C、D ) 7.( A,B,C,D )

三、填空题

1.对象的创建、使用分离、耦合度

2.创建型

3.创建性

4.懒汉式单例、饿汉式单例

5. 抽象原型类、具体原型类

四、程序分析题解:本题使用了单例模式,参考类图如下所示:

五、简答题

1. 答:创建型模式分为以下几种:

⑴单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局

访问点供外部获取该实例,其拓展是有限多例模式。

⑵原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆

出多个和原型类似的新实例。

⑶工厂方法(Factory Method)模式:定义一个用于创建产品的接口,由子

类决定生产什么产品。

⑷抽象工厂(Abstract Factory)模式:提供一个创建产品族的接口,其每

个子类可以生产一系列相关的产品。

⑸建造者(Builder)模式:将一个复杂对象分解成多个相对简单的部分,然

后根据不同需要分别创建它们,最后构建成该复杂对象。

2.答:单例模式重点在于在整个系统上共享一些创建时较耗资源的对象。整个应用中只维护一个特定类实例,它被所有组件共同使用。https://www.doczj.com/doc/818925007.html,ng.Runtime是单例模式的经典例子。从Java 5开始你可以使用枚举(enum)来实现线程安全的单例。

3.答:单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自

行创建这个实例的一种模式。

特点:1)单例类只有一个实例对象;2)该单例对象必须由单例类自行创建;3)单例类对外提供一个访问该单例的全局访问点。

应用场景:1)在某类只要求生成一个对象的时候;2)当对象需要被共享的场合;3)当某类需要频繁实例化,而创建的对象又频繁被销毁的时候。

4.答:原型模式通常适用以下场景:1)对象之间相同或相似,即只是个别的

几个属性不同的时候;2)对象的创建过程比较麻烦,但克隆比较简单时候。

原型模式可扩展为:带原型管理器的原型模式,它在原型模式的基础上增加了一个原型

管理器PrototypeManager类。

第3章创建型模式(下)

3.1工厂方法模式

3.2抽象工厂模式

3.3建造者模式

一、单选择题

1.( B )

2. ( A )

3. ( C )

4.( C )

5. ( D )

6. ( C )

7. ( B )

8. ( A )

9.( A ) 10.( A )

二、多选择题

1.( A、B、C、D ) 2.( A、B、C、D ) 3.( A、C )

三、填空题

1.工厂方法、抽象工厂

2.简单工厂

3.抽象工厂(Abstract Factory) 、具体工厂(Concrete Factory) 、抽象产品(Product)

4.工厂方法、多个等级的产品

5.抽象建造者(Builder)、具体建造者(ConcreteBuilder)、指挥者(Director)

五、简答题

1.答:工厂模式的最大好处是增加了创建对象时的封装层次。如果你使用工厂来创建对象,之后你可以使用更高级和更高性能的实现来替换原始的产品实现或类,这不需要在调用层做任何修改。应用场合是常常有新的对象类型要被添加进来,但你所关心的仅仅是方法的接口,不关心其实现细节,本书中已经详细地介绍了其好处和应用环境。

2.答:工厂方法模式的主要优点有:1)用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;2)在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无需对原工厂进行任何修改,满足开闭原则。

其缺点是:每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。

3.答:工厂方法模式中考虑的是一类产品的生厂,如:电视机工厂;而抽象工厂模式考虑多类产品的生产,如:电器工厂。

工厂方法模式通常适用以下场景:1)客户只知道创建产品的工厂名,而不知道具体的产品名。如:TCL 电视工厂、海信电视工厂等;2)创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。3)客户不关心创建产品的细节,只关心产品的品牌。

抽象工厂模式通常适用以下场景: 1)当需要创建的对象是一系列相互关联或相互依赖的产品族时,如:电器工厂中的电视机、洗衣机、空调等;2)系统中有多个产品族,但每次只使用其中的某一族产品。如:有的粉丝只喜欢穿李宁牌的衣、裤和鞋;3)系统中提供

了产品的类库,且所有产品的接口相同,客户端不依赖产品实例的创建细节和内部结构。

4.答:产品的种类称为产品等级,而一个具体工厂所生产的位于不同等级的一组产品称为一个产品族。

5.答:建造者模式的定义: 指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。

该模式的主要优点是: 1)各个具体的建造者相互独立的,有利于系统的扩展;2)客户端不必知道产品内部组成的细节,便于控制细节风险。

其缺点是:1)产品的组成部分必须相同,这限制了其使用范围;2)如果产品的内部变化复杂,该模式会增加很多的建造者类。

建造者模式通常在以下场合使用: 1)创建的对象较复杂,由多个部件构成,各部件面临着复杂的变化,但构件间的建造顺序是稳定的;2)创建复杂对象的算法独立于该对象的组成部分以及它们的装配方式,即产品的构建过程和最终的表示是独立的。

六、编程题

说明:1-5编程题可参考本章节的实例自己实现。

第4章

结构型模式(上)

4.2 代理模式

4.3 适配器模式

4.4 桥接模式

一、单选择题

1.( A )

2.( A )

3. ( D )

4. ( B )

5.

( A )

6. ( C )

7. ( D )

二、多选择题

1.( A、D )

2. ( A、B、D )

3.( A、C、D )

4. ( A、B、C )

三、填空题

1.适配器(Adapter)模式、桥接(Bridge)模式、装饰(Decorator)模式、外

观(Facade) 模式、享元(Flyweight)模式

2.真实主题(RealSubject)类、代理(Proxy)类

3.动态代理模式

4.继承、组合/聚合

5. 适配者(Adaptee)类、适配器(Adapter)类

6.桥接

7. 适配器

四、程序分析题

解:1)本题使用了代理器模式; 2)其参考结构图如下所

示:

五、简答题

1.答:代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问。

即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。

代理模式有以下的应用场景:1)为了隐藏目标对象存在于不同地址空间的事实,方便客户端访问时;2)要创建的目标对象开销很大时;3)控制不同种类客户对真实对象的访问权

限时;4)当调用目标对象需要附加一些额外的处理功能时;5)为了提高系统的性能,需延

迟对目标的加载时。

2.答:代理模式的主要优点有:1)代理模式在客户端与目标对象之间起到一

个中介作用和保护目标对象的作用;2)代理对象可以扩展目标对象的功能;3)代理

模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度。

其主要缺点是:1)在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢;

2)增加了系统的复杂度。

3.答:远程代理:这种方式通常是为了隐藏目标对象存在于不同地址空间的

事实,方便客户端访问。例如用户申请某些网盘空间时,会在用户的文件系统中建立一个虚拟的硬盘,用户访问它实际访问的是网盘空间。

虚拟代理:这种方式通常用于要创建的目标对象开销很大时。比如下载一幅很大的图像需要很长时间,因某种计算比较复杂而短时间无法完成,这时可以先用小比例的虚拟代理替换真实的对象,消除用户对服务器慢的感觉。

安全代理:这种方式通常用于控制不同种类客户对真实对象的访问权限。

4.答:适配器模式(Adapter)的定义如下: 将一个类的接口转换成客户希望

的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式2种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。

Java例子可参考本章节相关实例设计。

5.答:适配器模式通常适用以下场景: 1)以前开发的系统存在满足新系统

功能需求的类,但其接口同新系统的接口不一致;2)使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。

应用实例可参考本章节相关实例设计。

6.答:桥接模式的定义如下: 将抽象与实现分离,使他们可以独立的变化。

它是用组合关系代替继承关系来实现,从而降低了抽象和实现这2个可变维度的耦合度。

其优点是: 1)由于抽象与实现分离,所以扩展能力强;2)其实现细节对客户透明。

缺点是:由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,这增加了系统的理解与设计难度。

六、综合题

1.解:本题可使用适配器模式和抽象工厂模式,参考类图如下所示:

其中:1)PlayerFactory为抽象工厂,MediaPlayerFactory和RealPlayerFactory 是具体工厂;

2)MainWindow(主窗口)和PlayerList(播放列表)是两个抽象产品;

3)MediaPlayerWindow和RealPlayerWindow是两个具体产品,是对MainWindow的实现;

4)MediaPlayerList和RealPlayerList是两个具体产品,是对PlayerList的实现;

5)MediaPlayerWindow和MediaPlayerList由MediaPlayerFactory生产;

6)RealPlayerWindow和RealPlayerList由RealPlayerFactory生产;

7)MediaPlayerAPI是已有的API,充当适配者,供MediaPlayerWindow(适配器)和MediaPlayerList(适配器)调用。

8)RealPlayerAPI也是已有的API,充当适配者,供RealPlayerWindow(适配器)和RealPlayerList(适配器)调用。

第5章结构型模式(下)

5.1 装饰模式

5.2 外观模式

5.3 享元模式

5.4 组合模式

一、单选择题

1. ( D )

2. ( D )

3. ( B )

4. ( C )

5.( B )

6.( C ) 7. ( D ) 8. ( A ) 9. ( B ) 10.( C ) 二、多选择题

1.( A,B,C,D ) 2.( B,C ) 3.( A、B )4.( A、B、C )

5. ( A、B、C、D ) 6.( A,B ) 7. ( C,D )

三、填空题

1.抽象构件(Component)、具体构件(Concrete Component)、抽象装饰(Decorator)

2.迪米特

3.内部状态、外部状态

4.单纯、复合

5.结构型、创建型

6.透明式、安全式

四、程序分析题

1.解:本题使用了享元模式,参考类图如下所示:

2.解:1)本题使用了享元模式。

2)其参考程序代码如下所示: import

java.util.*; public class WareFactory

{ private ArrayList Wares = new ArrayList();

private int totalNum=0;

public WareFactory()

{

KitchenWare nd1=new bowl("饭碗");

Wares.add(nd1);

KitchenWare nd2=new cup("杯子");

Wares.add(nd2);

}

public KitchenWare getKitchenWare(String type)

{

if(type.equalsIgnoreCase("饭碗"))

{

totalNum++;

return (KitchenWare)Wares.get(0);

}

else if(type.equalsIgnoreCase("杯子"))

{

totalNum++;

return (KitchenWare)Wares.get(1);

}

else { return null; }

}

public int getTotalWare(){ return Wares.size(); } public int gettotalNum() { return totalNum; }

} public interface KitchenWare

{ public String getType();

public void use();

} public class bowl implements KitchenWare

{ private String type;

public bowl(String type) { this.type=type; } public String

getType() { return this.type; }

public void use() { System.out.println("使用的厨具是:" + this.type);}

} public class cup implements KitchenWare

{ private String type;

public cup(String type) { this.type=type; } public String getType()

{ return this.type; } public void use() { System.out.println("使用的厨具是:" +this.type); }

}

public class Client2010 {

public static void main(String[] args) {

KitchenWare kw1,kw2,kw3,kw4;

WareFactory df=new WareFactory();

kw1=df.getKitchenWare("饭碗"); https://www.doczj.com/doc/818925007.html,e();

kw2=df.getKitchenWare("饭碗"); https://www.doczj.com/doc/818925007.html,e();

kw3=df.getKitchenWare("杯子"); https://www.doczj.com/doc/818925007.html,e();

kw4=df.getKitchenWare("杯子"); https://www.doczj.com/doc/818925007.html,e();

System.out.println("厨具种类:" + df.getTotalWare());

System.out.println("生成的厨具数:" + df.gettotalNum());

}

}

五、简答题

1.答:装饰模式增加强了单个对象的能力。Java IO 到处都使用了装饰模式,经典的例子就是Buffered系列类如BufferedReader和BufferedWriter,它们增强了Reader和Writer对象,以实现提升性能的 Buffer 层次的读取和写入。

2.答:装饰模式是一种用于替代继承的技术,它使用对象之间的关联关系来

取代类之间的继承关系。当不能采用继承的方式对系统进行扩展或者采用继承不利于系统扩展和维护时可以使用装饰模式。在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有类的功能。这些都不用改变原有对象,满足开闭原则。

3.答:外观模式的定义:是一种通过为多个复杂的子系统提供一个一致的接

口,而使这些子系统更加容易被访问的模式。

其主要优点有:1)降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响到调用它的客户类;2)对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易;3)降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程,因为编译一个子系统不会影响其他的子系统,也不会影响到外观对象。

其主要缺点是:1)不能很好地限制客户使用子系统类;2)增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。

其应用场景有:1)对分层结构系统构建时,使用外观模式定义子系统中每层的入口点可以简化子系统之间的依赖关系;2)对于一个复杂系统,其子系统很多,外观模式可以为系统设计一个简单的接口供外界访问;3)当客户端与多个子系统之间存在很大的联系时,引入外观模式可将它们分离,从而提高子系统的独立性和可移植性。

4.答:享元工厂角色负责创建和管理享元角色。当客户对象请求一个享元对

象时,享元工厂检查系统中是否存在符合要求的享元对象,如果存在则提供给客户;

如果不存在的话,则创建一个新的享元对象,它是工厂模式在享元模式中的应用。

5.答:组合模式包含抽象构件(Component)角色、树叶构件(Leaf)角色、

树枝构件

(Composite)角色。它分为透明式的组合模式和安全式的组合模式2种。安全组合模式的类

图如下:

第6章行为型模式(上)

6.2 模板方法模式

6.3 策略模式

6.4 命令模式

一、单选择题

1.( A )

2. ( D )

3. ( C )

4. ( B )

5. ( A )

6.( B )

7. ( D )

8. ( A )

9. ( B )

二、多选择题

1.( B,C,D )

2. ( A,B,D )

3. ( A,B,C )

4.( A,B,C,D )

三、填空题

1.行为型模式

2.模板方法

3.抽象方法、具体方法、钩子方法

4.策略

5.简单工厂

6.命令

四、简答题

1.答:行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象

之间

怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及到算法与对象间职责的分配。

共有11种行为型模式,它们的定义如下:

⑴模板方法(Template Method)模式:定义一个操作中的算法骨架,而将算

法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法

的某些特定步骤。

⑵策略(Strategy)模式:定义了一系列算法,并将每个算法封装起来,使

他们可以相互替换,且算法的改变不会影响到使用算法的客户。

⑶命令(Command)模式:将一个请求封装为一个对象,使发出请求的责任和

执行请求的责任分割开。

⑷职责链(Chain of Responsibility)模式:把请求从链中的一个对象传到

下一个对象,直到请求被响应为止。通过这种方式去除对象之间的耦合。

⑸状态(State)模式:允许一个对象在其内部状态发生改变时改变其行为能

力。

⑹观察者(Observer)模式:多个对象间存在一对多关系,当一个对象发生

改变时,把这种改变通知给其它多个对象,从而影响其它对象的行为。

⑺中介者(Mediator)模式:定义一个中介对象来简化原有对象之间的交互

关系,降低系统中对象间的耦合度,使原有对象之间不必相互了解。

⑻迭代器(Iterator)模式:提供一种方法来顺序访问聚合对象中的一系列

数据,而不暴露聚合对象的内部表示。

⑼访问者(Visitor)模式:在不改变集合元素的前提下,为一个集合中的每

个元素提供多种访问方式,即每个元素有多个访问者对象访问。

⑽备忘录(Memento)模式:在不破坏封装性的前提下,获取并保存一个对象的内部状态,以便以后恢复它。

⑾解释器(Interpreter)模式:提供如何定义语言的文法,以及对语言句子的解释方法,即解释器。

2.答:模板方法的主要优点是:

1)它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展;

2)它在父类中提取了公共的部分代码,便于代码复用;

3)部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则。

模板方法的主要缺点是:

1)对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞

大,设计也更加抽象;

2)父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一

种反向的控制结构,它提高了代码阅读的难度。

其应用实例有:(自己介绍)

3.答:策略模式的结构图如下:

其应用场景有:1)一个系统需要动态地在几种算法中选择一种时,可将每个算法封装到策略类中;2)一个类定义了多种行为 , 并且这些行为在这个类的操作中以多个条件语句的形式出现,可将每个条件分支移入到它们各自的策略类中以代替这些条件语句;3)系统中各算法彼此完全独立,且要求对客户隐藏具体算法的实现细节时;4)系统要求使用算法的客户不应该知道其操作的数据时,可使用策略模式来隐藏与算法相关的数据结构;5)多

个类只区别在表现行为不同,可以使用策略模式,在运行时动态选择具体要执行的行为。

4.答:Java.util.List接口定义了增加(add)、删除(remove)、修改(set)、

查询

(indexOf)等策略,其实现类ArrayList、LinkedList等采用了不同的算法来实现这些策略,用户可根据其特点选用它们。

5.答:命令模式通常适用以下场景:1)当系统需要将请求调用者与请求接收者解

耦时,命令模式使得调用者和接收者不直接交互;2)当系统需要随机请求命令或经常增加或删除命令时,命令模式比较方便实现这些功能;3)当系统需要执行一组操作时,命令模式可以定义宏命令来实现该功能;4)当系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作时,可以将命令对象存储起来,采用备忘录模式来实现。

其应用实例有:(自己举例)

6.答:将命令模式与前面学的组合模式联合使用,这就构成了宏命令模式,也叫

组合命令模式,其具体结构图如下:

五、编程题

解:1)本题使用了策略模式

2)其参考程序代码如下所示:

interface TravelStrategy

{

public void travel();

}

class AirplaneStrategy implements TravelStrategy

{

public void travel()

{

System.out.println("飞机游!");

}

}

class TrainStrategy implements TravelStrategy

{ public void

travel()

{

System.out.println("火车游!");

}

}

class BicycleStrategy implements TravelStrategy

{ public void

travel()

{

System.out.println("自行车游!");

} }

class Person

{ private TravelStrategy

ts;

public setStrategy(TravelStrategy ts)

{ this.ts=ts;

}

public void travelMethod()

{

ts.travelMethod();

}

} class

Client

{ public static void main(String

args[])

{

TravelStrategy ts = new BicycleStrategy();

Person p1 = new Person(); p1.setStrategy(ts);

P1.travelMethod();

}

}

第7章行为型模式(中)

7.1 职责链模式

7.2 状态模式

7.3 观察者模式

7.4 中介者模式

一、单选择题

1.( B )

2.( C )

3. ( D ) 4.( D ) 5.( B )

6.( C ) 7. ( D ) 8.( C )

二、多选择题

1.( A,B,D )

2. ( A,C,D )

3.( A、B、C ) 4.( A,B,D )

5.( B,C,D )

三、填空题

1.对象行为型

2.纯的职责链模式、不纯的职责链模式

3.环境(Context)、抽象状态(State)、具体状态(ConcreteState)

4.观察者、命令

5.java.util.Observable、java.util.Observer

6.不定义中介者接口,把具体中介者对象实现成为单例

四、设计题

1.解:本题可使用观察者模式,参考类图如下所示:

五、简答题

1.答:职责链模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,

将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。

2.答:职责链模式是一种对象行为型模式,其主要优点有:

1)降低了对象之间的耦合度。该模式使得一个对象无需知道到底是哪一个对象处理其请求以及链的结构,发送者和接收者也无需拥有对方的明确信息。

2)增强了系统的可扩展性。可以根据需要增加新的请求处理类,满足开闭原则;

3)增强了给对象指派职责的灵活性。当工作流程发生变化,可以动态地改变链内的成员或者调动它们的次序,也可动态地新增或者删除责任。

4)职责链简化了对象之间的连接。每个对象只需保持一个指向其后继者的引用,不需保持其它所有处理者的引用,这避免了使用众多的if或者if-else语句。

5)责任分担。每个类只需要处理自己该处理的工作,不该处理的传递给下一个对象完成,明确各类的责任范围,符合类的单一职责原则。

其主要缺点是:

1)不能保证每个请求一定被处理。由于一个请求没有明确的接收者,所以不能保证它一定会被处理,该请求可能一直传到链的末端都得不到处理;

2)对于比较长的职责链,请求的处理可能涉及到多个处理对象,系统性能将受到一定影响;

3)职责链建立的合理性要靠客户端来保证,增加了程序的复杂性,可能会由于职责链的错误设置而导致系统出错,如:可能会造成循环调用。

3.答:通常在以下情况下可以考虑使用状态模式:1)当一个对象的行为取决于它

的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式;2)一个操作中含有庞大的分支结构,并且这些分支决定于对象的状态时。

在有些情况下,可能有多个环境对象需要共享一组状态,这时需要引入享元模式,将这

些具体状态对象放在集合中供程序共享,这就是共享状态模式。

4.答:观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图

(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。

5.答:观察者模式是基于目标对象的状态发生变化,而促使观察者对象作出相应

操作的一种行为型模式。如,一个天气系统,当天气变化时,展示给公众的视图中会有所反映,这里的天气是目标,而视图是观察者。

6.答:中介者模式包含:抽象中介者(Mediator)角色、具体中介者

(ConcreteMediator)角色、抽象同事类(Colleague)角色、具体同事类

(ConcreteColleague)角色。

其结构图如下:

六、综合题

1.解:对于描述1)可以选择使用工厂方法模式,对于描述2)可以选择使用观察者模式,参考类图如下所示:

在类图中,HouseCreator是抽象房屋工厂类,其子类VilladomCreator用于创建别墅Villadom,子类ApartmentCreator用于创建公寓Apartment,Villadom和Apartment都是抽象房屋类House的子类,此时应用了工厂方法模式,如果增加新类型的房屋,只需对应增加新的房屋工厂类即可,原有代码无须做任何修改;House类同时作为抽象观察目标,子类Villadom和Apartment作为具体观察目标,相关人员类Stakeholder作为抽象观察者,其子类Manager(主管)作为具体观察者,实现了在Stakeholder中声明的response()方法,当房屋售出时,房屋的状态status将发生变化,在setStatus()方法中调用观察者的response()方法,即主管将收到相应消息,此时应用了观察者模式。

2.解:对于描述1)可以选择使用中介者模式,对于描述2)可以选择使用适配器模式,参考类图如下所示:

java基础笔试测试题与答案

Java 一章至五章考试 一. 填空题(8 分) 1. 面向对象的三大原则是( 封装),( 继承) 和( 多态).2 分 2. 如果想在对象实例化的同时就初始化成员属性,则使用( 构造函数).2 分 3. ( 实体) 方法和( 构造) 方法不能修饰为abstract ?2分 二.选择题(60 分) 1) 在Java 语言中,下列(a,d )是不满足命名规范的变量名。(选择二项) a) 姓名 b) $Name c) _instanceof d) instanceof 2) 下列Java 代码片段的输出结果是( a ) 。 char c='a'; int i=c; float f=i; byte b=(byte)c; System.out.println(c+","+i+","+f+","+b); a) 编译错误 b) a,97,97,97 c) a,97,97.0,97 d) a,97,97.0f,97 3) 下列Java 代码中,空白处的代码是(b,c )。( 选择两项) public interface Fee{ public float calLabFee(float unitPrice, float time); } public class FeeImpl implements Fee { public float calLabFee(float unitPrice, float time){ return unitPrice * time; } } public class FeeInterfaceTest { public static void main(String[] args){ ________________ Float labFee = fee.calLabFee(400.00,5); } }

Java基础知识问答题

Java 基础知识问答题 包含的模块 本文分为十九个模块,分别是:Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM,如下图所示:

共包含208 道问答题,本文的宗旨是为读者朋友们整理一份基础知识的简单大纲,下面一起进入主题吧。 Java 基础 1. JDK 和JRE 有什么区别?

?JDK:Java Development Kit 的简称,Java 开发工具包,提供了Java 的开发环境和运行环境。 ?JRE:Java Runtime Environment 的简称,Java 运行环境,为Java 的运行提供了所需环境。 具体来说JDK 其实包含了JRE,同时还包含了编译Java 源码的编译器Javac,还包含了很多Java 程序调试和分析的工具。简单来说:如果你需要运行Java 程序,只需安装JRE 就可以了,如果你需要编写Java 程序,需要安装JDK。 2. == 和equals 的区别是什么? == 解读 对于基本类型和引用类型== 的作用效果是不同的,如下所示: ?基本类型:比较的是值是否相同; ?引用类型:比较的是引用是否相同; 代码示例: String x = "string"; String y = "string"; String z = new String("string"); System.out.println(x==y); // true System.out.println(x==z); // false System.out.println(x.equals(y)); // true System.out.println(x.equals(z)); // true 代码解读:因为x 和y 指向的是同一个引用,所以== 也是true,而new String()方法则重写开辟了内存空间,所以== 结果为false,而equals 比较的一直是值,所以结果都为true。 equals 解读

Java语言练习题库(含答案)

单选题 1. 为了保证方法的线程安全,声明方法的时候必须用哪个修饰符? (A) new (B) transient (C) void (D) synchronized 2. 编译Java源文件使用哪个? (A) javac (B) jdb (C) javadoc (D) junit 3. 哪一种类的对象中包含有Internet地址。 (A) Applet (B) Datagramsocket (C) InetAddress (D) AppletContext 4. 有关GUI容器叙述,不正确的是? (A) 容器是一种特殊的组件,它可用来放置其它组件 (B) 容器是组成GUI所必需的元素 (C) 容器是一种特殊的组件,它可被放置在其它容器中

(D) 容器是一种特殊的组件,它可被放置在任何组件中 5. 使用javadoc生成的文档的文件格式是? (A) XML格式 (B) 自定义格式 (C) 二进制格式 (D) HTML格式 6. 下列有关类、对象和实例的叙述,正确的是哪一项? (A) 类就是对象,对象就是类,实例是对象的另一个名称,三者没有差别 (B) 对象是类的抽象,类是对象的具体化,实例是对象的另一个名称 (C) 类是对象的抽象,对象是类的具体化,实例是类的另一个名称 (D) 类是对象的抽象,对象是类的具体化,实例是对象的另一个名称 7. 在事件委托类的继承体系中,最高层次的类是哪项? (A) java.util.EventListener (B) java.util.EventObject (C) java.awt.AWTEvent (D) java.awt.event.AWTEvent 8. Java语言中异常的分类是哪项? (A) 运行时异常和异常 (B) 受检异常和非受检异常

Java编程基础知识点汇总及习题集答案

J a v a编程基础知识点汇总及习题集答案 集团文件发布号:(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-

目录 第一章 Java入门 (2) 第二章 Java基础 (5) 第三章条件转移 (14) 第四章循环语句 (20) 第五章方法 (26) 第六章数组 (33) 第七章面向对象 (42) 第八章异常 (63) 第一章 Java入门 知识点汇总 1、JAVA 三大体系 Java SE:(J2SE,Java2 Platform Standard Edition,标准版),三个平台中最核心的部分,包含Java 最核心的类库。 JavaEE:(J2EE,Java 2 Platform, Enterprise Edition,企业版),开发、装配、部署企业级应用,包含Servlet、JSP、JavaBean、JDBC、EJB、Web Service等。 Java ME:(J2ME,Java 2

Platform Micro Edition,微型版),用于小型电子设备上的软件开发。 2、JDK,JRE,JVM的作用及关系作用 ★JVM:保证Java语言跨平台 ★JRE:Java程序的运行环境 ★JDK:Java程序的开发环境 关系 ★JDK:JRE+工具 ★JRE:JVM+类库 3、JDK环境变量配置 path环境变量:存放可执行文件的存放路径,路径之间 用逗号隔开 classpath环境变量:类的运行路径,JVM在运行时通过classpath加载需要的类 4、重点掌握两个程序 :Java编译器工具,可以将编写好的Java文件(.java)编译成Java字节码文件(.class); :Java运行工具,启动Java虚拟机进程,运行编译器生成的字节码文件(.class) 5、一切程序运行的入口public static void main (String args []){ World!”); } 课堂笔记

《JAVA设计模式》期末考试复习资料

《JAVA设计模式》复习资料 一、单项选择题 1.设计模式起源于() A、机械设计 B、建筑工程设计 C、水利工程设计 D、工业电力化设计 2.“不要和陌生人说话”是()原则的通俗表述。 A、接口隔离 B、里氏替换 C、依赖倒置 D、迪米特 3.目前常见的设计模式主要有()种。 A、23 B、21 C、32 D、28 4.以下关于单一职责原则的叙述不正确的是()。 A、单一职责原则的英文名称是Single Responsibility Principle. B、单一职责原则要求一个类只有一个职责 C、单一职责原则有利于对象的稳定,降低类的复杂性 D、单一职责原则提高了类之间的耦合性 5.以下关于依赖倒置原则的叙述不正确的是() A、依赖倒置原则的简称是DIP B、高层模块不依赖于低层模块,低层模块依赖于高层模块 C、依赖倒置原则中高层模块和低层模块都依赖于抽象 D、依赖倒置原则实现模块间的松耦合 6.下面关于单例模式说法错误的是() A、单例模式是指一个类只有一个实例 B、单例类从实现方式上分为懒汉式和饿汉式 C、单例类从功能上分为状态单例类和无状态单例类 D、可以通过继承的方式对单例类进行扩展得到功能更丰富的单例类 7.下面关于工厂方法模式说法错误的是()。 A、工厂方法模式使一个类是实例化延迟到其子类中 B、工厂方法模式中具有抽象工厂、具体工厂、抽象产品和具体产品4个角色 C、工厂方法模式可以处理多个产品的多个等级结构 D、工厂方法模式可以屏蔽产品类 8.在以下情况不适合使用责任职责链模式() A、有多个对象可以处理请求,哪个对象处理该请求在运行时刻自动确定。 B、在需要用比较通用和复杂的对象指针代替简单的指针的时候。 C、你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 D、一个请求需要一系列的处理工作。 9.当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用()模式 A、结构型 B、创建型 C、行为型 D、以上都可以 10.以下用来描述适配器模式的是() A、表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 B、定义一个用于创建对象的接口,让子类决定实例化哪一个类。 C、将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些

JAVA复习题库及答案

第一题单项选择题 1、在下列说法中,选出最正确的一项是(A )。 A、Java 语言是以类为程序的基本单位的 B、Java 语言是不区分大小写的 C、多行注释语句必须以//开始 D、在Java 语言中,类的源文件名和该类名可以不相同 2、下列选项中不属于Java 虚拟机的执行特点的一项是(D )。 A、异常处理 B、多线程 C、动态链接 D、简单易学 3、下列选项中,属丁JVM 执行过程中的特点的一项是( C )。 A、编译执行 B、多进程 C、异常处理 D、静态链接 4、在Java 语言中,那一个是最基本的元素?( C ) A、方法 B、包 C、对象 D、接口 5、如果有2 个类A 和B,A 类基于B 类,则下列描述中正确的一个是( B )。 A、这2 个类都是子类或者超类 B、A 是B 超类的子类 C、B 是A 超类的子类 D、这2 个类郡是对方的子类 6、使用如下哪个保留字可以使只有在定义该类的包中的其他类才能访问该类?(D ) A、abstract B、private (本类) C、protected(本包及其他包的子类) D、不使用保留字 7、编译一个定义了3 个类的Java 源文件后,会产生多少个字符码文件,扩展名是什么?(D ) A、13 个字节码文件,扩展名是.class B、1 个字节码文件,扩展名是.class C、3 个字节码文件,扩展名是.java D、3 个字节码文件,扩展名是.class 8、下列关于Java 程序结构的描述中,不正确的一项是( C )。 A、一个Java 源文件中可以包括一个package 语句 B、一个Java 源文件中可以包括多个类定义,但是只能有一个public 类 C、一个Java 源文件中可以有多个public 类 D、源文件名与程序类名必须一致 9、下列说法正确的一项是( C )。 A、java.1ang.Integer 是接口 B、java.1ang.Runnable 是类 C、Doulble 对象在iava.1ang 包中 D、Double 对象在java.1ang.Object 包中 10、以下关于面向对象概念的描述中,不正确的一项是( B )。 A、在现实生活中,对象是指客观世界的实体

Java基础试题及其答案

Java试题 1) java程序中,main方法的格式正确的是()。(选择一项) a)static void main(String[] args) b)public void main(String[] args) c)public static void main(String[]s) d)public static void main(String[] args) 2)给定java代码,如下: public byte count(byte b1,byte b2){ return______; } 要使用这段代码能够编译成功,横线处可以填入()。(选择一项)a)(byte) (b1-b2) b)(byte) b1-b2 c) b1-b2 d) (byte) b1/b2 3)在Java中,在包下定义一个类,要让包下的所有类都可以访问这个类,这个类必须定义为()。(选择一项) a)protected b)private c)public d)friendly 4)在Java中,下列()语句不能通过编译。 (选择一项) a) String s= “join”+ “was”+ “here”; b) String s= “join”+3; “”+new Person() toString() c) int a= 3+5 d) float f=5+; double float 6)给定java代码如下,运行时,会产生()类型的异常。(选择一项) String s=null; (“abc”); a)ArithmeticException b)NullPointerException c)IOException d)EOFException 已到文件尾,再读取抛出 7) 在java中,()对象可以使用键/值的形式保存数据。(选择一项) a)ArrayList List 有序可重复 b) HashSet Set 无序不可重复同一对象是重复 的 c) HashMap Map(key/value)重复定义:hashCode、 equals(业务) d) LinkedList List 8)给定如下java代码,编译运行之后,将会输出()。 public class Test{ public static void main(String args[]){ int a=5;

Java笔试题及答案

Java笔试题及答案 一、单项选择题 1.Java是从()语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 答案:B 2.下列语句哪一个正确() A. Java程序经编译后会产生machine code B. Java程序经编译后会产生byte code C. Java程序经编译后会产生DLL D.以上都不正确 答案:B 3.下列说法正确的有() A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与class同名 C. constructor在一个对象被new时执行 D.一个class只能定义一个constructor 答案:C 详解:见下面代码,很明显方法是可以和类名同名的,和构造方法唯一的区别就是,构造方法没有返回值。 package net.study; public class TestConStructor { public TestConStructor() {

} public void TestConStructor() { } public static void main(String[] args) { TestConStructor testConStructor = new TestConStructor(); testConStructor.TestConStructor(); } } 4.提供Java存取数据库能力的包是() 答案:A 5.下列运算符合法的是() A.&& B.<> C.if D.:= 答案:A 详解: java 中没有<> := 这种运算符,if else不算运算符 6.执行如下程序代码 a=0;c=0; do{ --c; a=a-1; }while(a>0); 后,C的值是()

java设计模式选择题复习

工厂系列模式的优缺点: 1.让用户的代码和某个特定类的子类的代码解耦 用户不必知道它所使用的对象是怎样创建的,只需知道该对象有哪些方法 2.抽象工厂模式可以为用户创建一系列相关的对象,使用户和创建这些对象的类脱耦 MVC模式是不是一种设计模式?为什么 MVC不是设计模式,应该是框架/架构模式,因为它的定义是抽象的,没有足够的细节描述使你直接去实现,而只能根据MVC的概念和思想,用几个设计模式组合实现。 举出一个生活中使用装饰者模式的例子,用程序实现思路 举个生活中的例子,俗话说“人在衣着马在鞍”,把这就话用装饰者模式的语境翻译一下,“人通过漂亮的衣服装饰后,男人变帅了,女人变漂亮了;”。对应上面的类图,这里人对应于ConcreteComponent,而漂亮衣服则对应于ConcreteDecorator; 设计模式如何分类,每一个类别都有什么特征? 设计模式分为3类,分别是:创建型模式、行为型模式、结构型模式。 创建型特点:避免用户直接使用new运算符创建对象。 行为型特点:怎样合理的设计对象之间的交互通信,以及怎样合理的为对象分配职 结构型特点:主要用于处理类或对象的组合 Java jdk中使用了哪些设计模式 1.单例 2.静态工厂 3.工厂方法 4.抽象工厂 5.构造者 6.原型 7.适配器8桥接9.组合10.装饰器11.外观12.享元 页脚内容1

14.代理15.迭代器16.观察者17.协调者18.模板方法19.策略20.责任链21.命令22.空对象25.解释器 面向对象的设计原则有哪些? 开闭原则、面向抽象的原则(依赖倒转原则)、多用组合少用继承原则、高内聚-低耦合原则。 观察者模式的推拉有什么不同?使用场景 推,具体主题将变化后的数据全部交给具体观察者。场景:当具体主题认为具体观察者需要这些变换后的数据时,往往采用推数据方式; 拉,具体主题不将变化后的数据交给具体观察者,而是提供获得这些数据的方法。场景:当具体主题不知道具体观察者是否需要这些变换后的数据时,往往采用拉数据的方式。 策略模式和工厂模式有什么不同? 策略模式定义了一系列算法,将他们一个个封装,并且他们之间可以相互替换; 工厂模式定义一个创建对象的接口,让子类决定实例化哪一个类 5观察者模式的推拉有什么不同?适用场景 现在要说的分歧在这里: “推”的方式是指,Subject维护一份观察者的列表,每当有更新发生,Subject会把更新消息主动推送到各个Observer去。 “拉”的方式是指,各个Observer维护各自所关心的Subject列表,自行决定在合适的时间去Subject获取相应的更新数据。 “推”的好处包括: 页脚内容2

JAVA入门练习50题(含答案)

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题 public class lianxi01 { public static void main(String[] args) { System.out.println("第1个月的兔子对数: 1"); System.out.println("第2个月的兔子对数: 1"); int f1 = 1, f2 = 1, f, M=24; for(int i=3; i<=M; i++) { f = f2; f2 = f1 + f2; f1 = f; System.out.println("第" + i +"个月的兔子对数: "+f2); } } } 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 public class lianxi02 { public static void main(String[] args) { int count = 0; for(int i=101; i<200; i+=2) { boolean b = false; for(int j=2; j<=Math.sqrt(i); j++) { if(i % j == 0) { b = false; break; } else { b = true; } } if(b == true) {count ++;System.out.println(i );} } System.out.println( "素数个数是: " + count); } }

java笔试题及答案.doc

java笔试题及答案 有了下面java笔试题及答案,进行java笔试时就容易多了,请您对下文进行参考: 1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域当前类同一package子孙类其他package public 7 7 7 7 protected 7 7 7 X friendly 7 7 X X private 7 X X X 不写时默认为friendly 2、Anonymouslnner Class (匿名内部类)是否可以exte nd s (继承)其它类,是否可以imple ment s (实现)i nterf ace (接口) 答:匿名的内部类是没有名字的内部类。不能exte n ds (继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3、Sta ti cNestedC las s 和Inner Clas s 的不同答: Nes tedC lass (一般是C+ +的说法),In ne rClass (—般是JAVA的说法)。J ava内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注:静态内部类(I

nn erClass)意味着1创建一个st atic内部类的对象,不需要一个外部类对象,2不能从一个st atic内部类的一个对象访问一个外部类对象 4、和的区别 答:是位运算符,表示按位与运算,是逻辑运算符,表示遷辑与(and ) 5、Coll ect ion 和Col lect ions 的区别 答:Coll ect ion是集合类的上级接口,继承与他的接口主要有Set和List. Col lections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作 6、什么时候用assert 答:asserti on (断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,a ssertion 就是在程序中的一条语句,它对一个boolea n表 达式进行检查,一个正确程序必须保证这个bool ean表达 式的值为tr ue;如果该值为fal se,说明程序己经处于不正确的状态下,系统将给出警告或退出。一般来说,

java设计模式-期末整理

第四章 命令模式 命令模式: 将一个请求封装为一个对象,从而使用户可用不同得请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作(在命令模式中,当一个对象请求另外一个对象调用其方法时,不和被请求的对象直接打交道,而是把这种请求封装到一个称为“命令”的对象中,其封装手段是将“请求”封装在一个命令对象的一个方法中,命令模式的核心就是使用命令对象来方法调用。) 命令模式的四个角色: 接收者(Receiver ):接收者是一个类的实例,负责执行与请求相关的操作 命令接口(Command ):命令是一个接口,规定了用来封装“请求”的若干个方法。如execute ()、undo ()。 具体命令(ConcreteCommand ):是实现命令接口的实例 请求者(Invoke ):是一个包含Command 接口变量的类的实现 单向关联 命令模式的优点: 1:请求者不与接收者直接交互联系(即请求者不包含接收者的引用),他们之间无耦合关系 2:满足开闭原则。如在增加新的具体命令和接收者时,不必修改请求者的代码,反之在增加新的请求者时,也不必修改具体命令和接收者的代码 3:由于请求者的请求被封装到了具体命令中,这个命令在需要时可重复使用,使用命令模式可以记录日志 4:使用命令模式可以是“请求”排队,因此可以按一定的顺序执行这些命令 第五章 观察者模式 观察者模式: 定义对象间一对多的依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都得到通知并自动更新。(观察者模式是关于多个对象 想知道一个对象中数据变化情况的一种成熟模式。观察者模式中有一个称为“主题”的对象和多个称作“观察者”的对象,“主题”和“观察者”间是一种一对多的依赖关系,当“主题”发生变化时,所有的“观察者”得到通知。) 《interface 》 Comman d +execute ():void Invoke command :Command +executeCommand ():void Receiver command:Command +action():void ConcreteCommand Receiver:Receiver +execute():void

Java复习题及答案

一、判断题(每题1分,共15分) 1、Java允许创建不规则数组,即Java多维数组中各行的列数可以不同。( 1 ) 2、接口和类一样也可以有继承关系,而且都只能支持单继承。(0 ) 3、所有类至少有一个构造器,构造器用来初始化类的新对象,构造器与类同名,返回类型只能为void。(0 ) 4、包是按照目录、子目录存放的,可以在程序中用package定义包,若没有package一行,则表示该文件中的类不属于任何一个包。(0 ) 5、Java对事件的处理是采用委托方式进行的,即将需要进行事件处理的组件委托给指定的事件处理器进行处理。( 1 ) 6、在异常处理中,若try中的代码可能产生多种异常则可以对应多个catch语句,若catch中的参数类型有父类子类关系,此时应该将父类放在前面,子类放在后面。(0 ) 7、在实例方法或构造器中,this用来引用当前对象,通过使用this可引用当前对象的任何成员。( 1 ) 8、我们可以方便地编写Java客户机/服务器程序,在客户机/服务器模式中,客户机一般通过套接字(Socket)使用服务器所提供的服务,Socket由两部分组成:IP地址和端口号。 ( 1 ) 9、Java的屏幕坐标是以像素为单位,容器的左下角被确定为坐标的起点。(0 ) 10、Java程序里,创建新的类对象用关键字new,回收无用的类对象使用关键字free。(0 ) 11、当一个方法在运行过程中产生一个异常,则这个方法会终止,但是整个程序不一定终止运行。 (1 ) 12、如果f是父类Flower的对象,而r是子类Rose的对象,则语句f=r是正确的。(1 ) 13、Java系统的标准输入对象是System.in,标准输出对象有两个,分别是System.out和System.err。 (1 ) 14、final类中的属性和方法都必须被final修饰符修饰。(0) 15、子类可以定义与父类同名的方法,称为方法的覆盖,方法覆盖要求子类的方法与父类的方法名字和参数都相同,但返回值类型可以不同。(0 ) 二、单项选择题(每题2分,共30分) 1、若在某一个类定义中定义有如下的方法: final void aFinalFunction( );则该方法属于( c )。 A、本地方法 B、解态方法 C、最终方法 D、抽象方法 2、main方法是Java Application程序执行的入口点,关于main方法的方法头以下哪项是合法的( b )。 A、p ublic static void main() B、public static void main(String[ ] args) C、public static int main(String[ ] args) D、p ublic void main(String arg[ ]) 3、在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数个数、类型或顺序各不相同,传回的值也可以不相同。这种面向对象程序的特性称为( c )。

JAVA试题及答案

JA V A语言基础内部测试题 选择题(针对以下题目,请选择最符合题目要求的答案,针对每一道题目,所有答案都选对,则该题得分,所选答案错误或不能选出所有答案,则该题不得分。)(每题2分) 没有注明选择几项的,只选择一项 1、JAVA所定义的版本中不包括:() A、JAVA2 EE B、JAVA2 Card C、JAVA2 ME D、JAVA2 HE E、JAVA2 SE 2、下列说法正确的是() A、JAVA程序的main方法必须写在类里面 B、JAVA程序中可以有多个main方法 C、JAVA程序中类名必须与文件名一样 D、JAVA程序的main方法中如果只有一条语句,可以不用{}(大括号)括起来 3、Java中,在如下所示的Test类中,共有()个构造方法。 public class Test{ private int x; public Test(){ x=35; } public void Test(double f){ =(int)f; } public Test(String s){} } A、0 B、 1 C、 2 D、3 4、变量命名规范说法正确的是() A、变量由字母、下划线、数字、$符号随意组成; B、变量不能以数字作为开头; C、A和a在java中是同一个变量; D、不同类型的变量,可以起相同的名字; 5、下列javaDoc注释正确的是() A、/*我爱北京天安门*/

B、quals("john") C、"john" = "john" D、"john".equals(new String("john")) 6、下列输出结果是() int a = 0 ; while ( a < 5 ) { switch(a){ case 0: case 3 : a = a + 2; case 1 : case 2 : a = a + 3; default : a = a + 5; } } ( a ) ; A、0 B、5 C、10 D、其他 7、下列代码输出结果是( ) int i = 10; while ( i > 0 ){ i = i + 1; if ( i = =10 ){ break; } } A.while循环执行10次 B.死循环 C.循环一次都不执行 D.循环执行一次 8、下面有关for循环的描述正确的是() A、for循环体语句中,可以包含多条语句,但要用大括号括起来 B、for循环只能用于循环次数已经确定的情况 C、在for循环中,不能使用break语句跳出循环 D、for循环是先执行循环体语句,后进行条件判断 9、下列()属于引用数据类型(选择两项) A、String B、char C、用户自定义的Student类类型

Java经典面试题大全_带答案

Java经典面试题带答案一、单项选择题 1.Java是从()语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 答案:B 2.下列语句哪一个正确() A.Java程序经编译后会产生machine code B.Java程序经编译后会产生byte code(字节码) C.Java程序经编译后会产生DLL D.以上都不正确 答案:B 3.下列说法正确的有() A.class中的constructor不可省略 B.constructor必须与class同名,但方法不能与class同名C.constructor在一个对象被new时执行(构造器) D.一个class只能定义一个constructor 答案:C 4.提供Java存取数据库能力的包是() A.Java.sql /sql/数据库还有Oracle 也是一种数据库 B.java.awt C.https://www.doczj.com/doc/818925007.html,ng D.java.swing 答案:A 5.下列运算符合法的是() A.&& B.<> C.if D.:= 答案:A 6.执行如下程序代码 a=0;c=0; do{ --c; a=a-1; }while(a>0); 后,C的值是() A.0 B.1 C.-1 D.死循环

答案:C 7.下列哪一种叙述是正确的() A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{}包住 C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 答案:D 8.下列语句正确的是() A.形式参数可被视为localvariable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数 D.形式参数不可以是对象 答案:A 9.下列哪种说法是正确的() A.实例方法可直接调用超类的实例方法 B.实例方法可直接调用超类的类方法 C.实例方法可直接调用其他类的实例方法 D.实例方法可直接调用本类的类方法 答案:D 二、多项选择题 1.Java程序的种类有() A.类(Class) B.Applet C.Application D.Servlet 2.下列说法正确的有() A.环境变量可在编译sourcecode时指定 B.在编译程序时,所能指定的环境变量不包括class path C.javac一次可同时编译数个Java源文件 D.javac.exe能指定编译结果要置于哪个目录(directory)答案:BCD 3.下列标识符不合法的有() A.new B.$Usdollars C.1234 D.car.taxi 答案:ACD 4.下列说法错误的有() A.数组是一种对象 B.数组属于一种原生类 C.intnumber=[]={31,23,33,43,35,63} D.数组的大小可以任意改变 答案:BCD 5.不能用来修饰interface的有()

最新java设计模式考试题资料

1、设计模式一般用来解决什么样的问题( a) A.同一问题的不同表相 B不同问题的同一表相 C.不同问题的不同表相 D.以上都不是 2、下列属于面向对象基本原则的是( c ) A.继承 B.封装 C.里氏代换 D都不是 3、Open-Close原则的含义是一个软件实体( a ) A.应当对扩展开放,对修改关闭. B.应当对修改开放,对扩展关闭 C.应当对继承开放,对修改关闭 D.以上都不对 4、当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用( a )模式。 A.创建型 B.结构型 C行为型 D.以上都可以 5、要依赖于抽象,不要依赖于具体。即针对接口编程,不要针对实现编程,是( d )的表述 A.开-闭原则 B.接口隔离原则 C.里氏代换原则 D.依赖倒转原则 6、依据设计模式思想,程序开发中应优先使用的是( a )关系实现复用。 A, 委派 B.继承 C创建 D.以上都不对 复用方式:继承和组合聚合(组合委派) 7、设计模式的两大主题是( d ) A.系统的维护与开发 B 对象组合与类的继承 C.系统架构与系统开发 D.系统复用与系统扩展 8、单子模式中,两个基本要点( a b )和单子类自己提供单例 A .构造函数私有 B.唯一实例 C.静态工厂方法 D.以上都不对 9、下列模式中,属于行为模式的是( b ) A.工厂模式 B观察者 C适配器以上都是 10、“不要和陌生人说话” 是( d )原则的通俗表述 A.接口隔离 B.里氏代换 C.依赖倒转 D.迪米特:一个对象应对其他对象尽可能少的了解 11、构造者的的退化模式是通过合并( c )角色完成退化的。 A.抽象产品 B产品 C创建者 D使用者

java习题及答案第1章 习题参考答案

第1章习题解答 1.Java语言有那些特点? 答:Java语言的特点包括:平台无关性、面向对象、简单性、安全性、分布式、健壮性、解释型、多线程。 2.为什么说Java是结构中立的,具有跨平台特性? 答:无论哪种编程语言编写的程序最终都需要操作系统和处理器来完成程序的运行,平台无关性是指软件的运行不因操作系统、处理器的变化导致程序无法运行或出现运行错误。 以C++程序为例,C++编译器针对源程序所在平台进行编译、连接,然后生成机器指令,这样就无法保证C++编译器产生的可执行文件在所有平台上都被正确执行。如果更换了平台,可能需要修改源程序,并针对新的平台重新编译源程序。 相反,Java源代码不会针对一个特定平台进行编译,而是生成一种字节码中间文件(class 文件),这种文件是平台无关且体系结构中立的。也就是说,无论一个Java程序是在Windows、Solaris、Linux还是其他具有Java编译器的操作系统下编译,作为编译结果的字节码文件都是相同的,都可以在任何具有Java虚拟机(JVM)的计算机上运行。JVM能够识别这些字节码文件,JVM将字节码文件进行转换,使之能够在不同平台上运行。任何操作系统只要安装了JVM,就可以解释并执行这种与体系结构无关的字节码文件,实现了跨平台。 跨平台特性保证了Java的可移植性,任何Java源程序都可以移植到其他平台上。除此之外,Java的数据类型与机器无关,原始数据类型存储方式是固定的,避开了移植时可能产生的问题。例如,在任何机器上,Java的整型都是32位的,而C++中整型的存储依赖于目标计算机。另外Java的字符串采用标准的Unicode格式保存,也保证了Java的可移植性。 3.简述Java的3种主要平台,这些适合开发那种应用? 答:Java的开发平台(JDK)是开发人员用来构建Java应用程序的软件包,它包括:Java 虚拟机(JVM)、Java编译器(javac)、Java归档(jar)实用程序、Java文档(javadoc)实用程序等。目前,Java的运行平台主要分为下列3个版本。 (1)Java标准版 Java标准版即Java SE,曾被称为J2SE。Java SE提供了标准的JDK开发平台,利用该平台可以开发桌面应用程序、低端的服务器应用程序以及Java Applet程序。学习Java应当从Java SE开始,本书主要介绍Java SE。

Java开发工程师笔试题(带答案)

Java开发工程师笔试试题 (请不要在试题上留任痕迹,所有答案均写在答题纸上) 一.编程题(共26分) 1.任意写出一种排序算法。(6分) public void sort(int [] array){ //代码区 } 2.求1+2+3+..n(不能使用乘除法、for 、while 、if 、else 、switch 、case 等关键字 以及条件判断语句)(8分) public int sum(int n){ //代码区 return 0; } 3.完成下面法,输入一个整数,输出如下指定样式图案。(12分) 输入:3, 输出: 1*2*3 7*8*9 4*5*6

输入:4 输出: 1*2*3*4 9*10*11*12 13*14*15*16 5*6*7*8 public void drawNumPic(int n){ //代码区 } 二.选择题(定项选择每题3分,不定项选择每题4分,共63分) 1.在基本JAVA类型中,如果不明确指定,整数型的默认是__类型,带小数的默认是__类型?( B ) A.int float B.int double C.long float D.long double 2.只有实现了__接口的类,其对象才能序列化( A ) A.Serializable B.Cloneable https://www.doczj.com/doc/818925007.html,parable

D.Writeable 3.代码System. out. println(10 % 3 * 2);将打印出?( B ) A. 1 B.2 C.4 D.6 4.以下程序运行的结果为( A ) public class Example extends Thread{ @Override public void run(){ try{ Thread.sleep(1000); }catch (InterruptedException e){ e.printStackTrace(); } System.out.print("run"); } public static void main(String[] args){ Example example=new Example(); example.run(); System.out.print("main"); } } A.run main B.main run C.main D.run E.不能确定 5.下面有关java实例变量,局部变量,类变量和final变量的说法,错误的是?( B ) A.实例变量指的是类中定义的变量,即类成员变量,如果没有初始化,会有默认值

软件设计模式(JAVA)习题答案

软件设计模式(Java版)习题 第1章软件设计模式基础 1.1 软件设计模式概述 1.2 UML中的类图 1.3 面向对象的设计原则 一、名词解释 1.一个软件实体应当对扩展开放,对修改关闭,即在不修改源代码的基础上扩展 一个系统的行为。 2.一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 3.在软件中如果能够使用基类对象,那么一定能够使用其子类对象。 4.是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结, 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 二、单选择题 1.( A ) 2.( A ) 3. ( A ) 4. ( D ) 5. ( D ) 6.( A ) 7. ( D ) 8.( D ) 9.( D ) 10.( E ) 11.( C ) 12.( C ) 13. ( A ) 三、多选择题 1.( A、B、C、D ) 2. ( A、B ) 3.( A、D ) 4.( A、B、C、D ) 四、填空题 1.依赖倒转、迪米特法则、单一职责 2.模式名字、目的、问题、解决方案、效果、实例代码 3.超类、子类 4.开闭 5.用户 6.依赖倒转 7.组合/聚合 8.结构型、行为型 9.依赖倒转 10.开闭 11.需求收集是否正确、体系结构的构建是否合理、测试是否完全 12.人与人之间的交流 13.接口 14.名称、目的、解决方案 15.对象组合、类继承

16.对象组合 17.对象组合、类继承 18.抽象类的指针 五、简答题 1.答:设计模式按类型分为以下三类: 1)创建型设计模式:以灵活的方式创建对象集合,用于管理对象的创建。 2)结构型设计模式:将己有的代码集成到新的面向对象设计中,用于处理类或对象的组合。 3)行为型设计模式:用于描述对类或对象怎样交互和怎样分配职责。 2.答:设计模式的主要优点如下: 1)设计模式融合了众多专家的经验,并以一种标准的形式供广大开发人员所用,它提供了一套通用的设计词汇和一种通用的语言以方便开发人员之间沟通和交 流,使得设计方案更加通俗易懂。 2)设计模式使人们可以更加简单方便地复用成功的设计和体系结构,将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。设计模式使得重用成功的设计更加容易,并避免那些导致不可重用的设计方案。 3)设计模式使得设计方案更加灵活,且易于修改。 4)设计模式的使用将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本。 5)设计模式有助于初学者更深入地理解面向对象思想,一方面可以帮助初学者更加方便地阅读和学习现有类库与其他系统中的源代码,另一方面还可以提高软件的设计水平和代码质量。 3.答:设计模式一般有如下几个基本要素:模式名称、问题、目的、解决方案、效 果、实例代码和相关设计模式,其中的关键元素包括模式名称、问题、解决方案和效果。 4.答:正确使用设计模式具有以下优点: ⑴可以提高程序员的思维能力、编程能力和设计能力。 ⑵使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从 而缩短软件的开发周期。 ⑶使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。 5.答:根据类与类之间的耦合度从弱到强排列,UML中的类图有以下几种关系:依赖关 系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中泛化和实现的耦合度相等,它们是最强的。

相关主题
文本预览
相关文档 最新文档