【设计模式_单选填空】选择填空

一. 单选题(共31题,83.7分)

  1. (单选题)在面向对象软件开发过程中,采用设计模式( )。
    A. 允许在非面向对象程序设计语言中使用面向对象的概念
    B. 以复用成功的设计和体系结构
    C. 以减少设计过程创建的实例对象的个数
    D. 以保证程序的运行速度达到最优值
    我的答案: B:以复用成功的设计和体系结构;正确答案: B:以复用成功的设计和体系结构;
    2.7分
    答案解析:设计模式的目的
  2. (单选题)设计模式具有( )的优点。
    A. 适应需求变化
    B. 程序易于理解
    C. 减少开发过程中的代码开发工作量
    D. 简化软件系统的设计
    我的答案: A:适应需求变化;正确答案: D:简化软件系统的设计;
    0分
    答案解析:设计模式优点
  3. (单选题)在进行面向对象设计时,采用设计模式能够( )。
    A. 复用相似问题的相同解决方案
    B. 改善代码的平台可移植性
    C. 改善代码的可理解性
    D. 增强软件的易安装性
    我的答案: A:复用相似问题的相同解决方案;正确答案: A:复用相似问题的相同解决方案;
    2.7分
    答案解析:设计模式的作用
  4. (单选题)以下关于简单工厂模式的叙述错误的是( )。
    A. 简单工厂模式可以根据参数的不同返回不同的类的实例
    B. 简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类
    C. 简单工厂模式可以减少系统中类的个数,简化系统的设计,使得系统更易于理解
    D. 系统的扩展困难,一旦添加新的产品就不得不修改工厂逻辑,违背开闭原则
    我的答案: C:简单工厂模式可以减少系统中类的个数,简化系统的设计,使得系统更易于理解;正确答案: C:简单工厂模式可以减少系统中类的个数,简化系统的设计,使得系统更易于理解;
    2.7分
    答案解析:简单工厂模式的优点
  5. (单选题)在简单工厂模式中,如果需要增加新的具体产品,必须修改( )的源代码。
    A. 抽象产品类
    B. 其他具体产品类
    C. 工厂类
    D. 客户类
    我的答案: C:工厂类;正确答案: C:工厂类;
    2.7分
    答案解析:简单工厂模式结构中的角色分配及其作用
  6. (单选题)关于Java 语言实现简单工厂模式中的静态工厂方法,以下叙述错误的是( )。
    A. 工厂子类可以继承父类非私有的静态方法
    B. 工厂子类可以覆盖父类的静态方法
    C. 工厂子类的静态工厂方法可以在运行时覆盖由工厂父类声明的工厂对象的静态工厂方法
    D. 静态工厂方法支持重载
    我的答案: C:工厂子类的静态工厂方法可以在运行时覆盖由工厂父类声明的工厂对象的静态工厂方法;正确答案: C:工厂子类的静态工厂方法可以在运行时覆盖由工厂父类声明的工厂对象的静态工厂方法;
    2.7分
    答案解析:简单工厂模式结构中角色分工及结构特点
  7. (单选题)以下代码使用了( A )模式。
    public abstract class ExchangeMethod {
    public abstract void process();
    }
    public class DigitalCurrency extends ExchangeMethod{
    public void process(){…}
    }
    public class CreditCard extends ExchangeMethod{
    public void process(){…}
    }

    public class Factory{
    public static ExchangeMethod createProduce(String type){
    switch (type){
    case “DigitalCurrency”:
    return new DigitalCurrency();
    break;
    case “CreditCard”:
    return new CreditCard();
    break;
    }
    }
    }
    A. Simple Factory
    B. Factory Method
    C. Abstract Factory
    D. 未用任何设计模式
    我的答案: A:Simple Factory;正确答案: A:Simple Factory;
    2.7分
    答案解析:简单工厂模式代码实现
  8. (单选题)下图是( )模式的结构图。

A. Abstract Factory
B. Factory Method
C. Command
D. Chain of Responsibility
我的答案: B:Factory Method;正确答案: B:Factory Method;
2.7分
答案解析:工厂方法模式结构图
9. (单选题)以下关于工厂方法模式的叙述错误的是( )。 改多选
A. 在工厂方法模式中引入了抽象工厂类,而具体产品的创建延迟到具体工厂中实现
B. 工厂方法模式添加新的产品对象很容易,无须对原有系统进行修改,符合开闭原则
C. 工厂方法模式存在的问题是在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,随着类个数的增加,会给系统带来一些额外开销
D. 工厂方法模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态,工厂方法模式退化后可以演变成抽象工厂模式
我的答案: D:工厂方法模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态,工厂方法模式退化后可以演变成抽象工厂模式;正确答案: D:工厂方法模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态,工厂方法模式退化后可以演变成抽象工厂模式;
2.7分
答案解析:简单工厂模式代码实现
10. (单选题)某银行系统采用工厂模式描述其不同账户之间的关系,设计出的类图如图所示。其中与工厂模式中的“Creator”角色相对应的类是( )。

A. Bank
B. Account
C. Checking
D. Savings
我的答案: A:Bank;正确答案: A:Bank;
2.7分
答案解析:工厂模式结构角色划分
11. (单选题)以下选项( )可作为工厂方法模式的应用实例。
A. 曲线图创建器生成曲线图,柱状图创建器生成柱状图
B. 通过复制已有邮件对象创建新的邮件对象
C. 在网络上传输大图片时,先传输对应的文字描述,再传输真实的图片
D. 在多个界面组件类之间添加一个控制类来协调它们之间的相互调用关系
我的答案: A:曲线图创建器生成曲线图,柱状图创建器生成柱状图;正确答案: A:曲线图创建器生成曲线图,柱状图创建器生成柱状图;
2.7分
答案解析:工厂方法模式应用场景
12. (单选题)不同品牌的手机应该由不同的公司制造,苹果公司生产苹果手机,三星公司生产三星手机,该场景蕴含了( )设计模式。
A. Simple Factory
B. Factory Method
C. Abstract Factory
D. Builder
我的答案: B:Factory Method;正确答案: B:Factory Method;
2.7分
答案解析:工厂方法模式应用场景分析
13. (单选题)以下关于抽象工厂模式的叙述错误的是( )。改多选
A. 抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类
B. 当系统中有多于一个产品族时可以考虑使用抽象工厂模式
C. 当一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、更有效率
D. 抽象工厂模式符合开闭原则,增加新的产品族和新的产品等级结构都很方便
我的答案: D:抽象工厂模式符合开闭原则,增加新的产品族和新的产品等级结构都很方便;正确答案: D:抽象工厂模式符合开闭原则,增加新的产品族和新的产品等级结构都很方便;
2.7分
答案解析:抽象工厂模式优缺点
14. (单选题)关于抽象工厂模式的叙述,下错误的一项是( )。改简答题
A. 抽象工厂模式提供了创建一系列相关或相互赖的对象的接口,而无须指定这些对象所属的具体类
B. 抽象工厂模式可应用于一个系统要由多个产品系列中的一个来配置的时候
C. 抽象工厂模式可应用于强调一系列相关产品对象的设计以便进行联合使用的时候
D. 抽象工厂模式可应用于希望使用已经存在的类,但其接口不符合需求的时候
我的答案: D:抽象工厂模式可应用于希望使用已经存在的类,但其接口不符合需求的时候;正确答案: D:抽象工厂模式可应用于希望使用已经存在的类,但其接口不符合需求的时候;
2.7分
答案解析:抽象工厂模式特点
15. (单选题)关于抽象工厂模式中的产品族和产品等级结构叙述错误的是( )。
A. 产品等级结构是从不同的产品族中任意选取产品组成的层次结构
B. 产品族是指位于不同产品等级结构、功能相关的产品组成的家族
C. 一个具体工广可以创建出分属于不同产品等级结构的一个产品族中的所有对象
D. 工厂方法模式对应一个产品等级结构.而抽象工厂模式则需要面对多个产品等级结构
我的答案: A:产品等级结构是从不同的产品族中任意选取产品组成的层次结构;正确答案: A:产品等级结构是从不同的产品族中任意选取产品组成的层次结构;
2.7分
答案解析:抽象工厂模式优缺点
16. (单选题)某公司欲开发一个图表显示系统,在该系统中,曲线图生成器可以创建曲线图、曲
线图图例和曲线图数据标签,柱状图生成器可以创建柱状图、柱状图图例和柱状图数据标
签。用户要求可以很方便地增加新的类型的图形,系统需具备较好的可扩展能力。针对这
种需求,公司采用( )最为恰当。
A. 桥接模式
B. 适配器模式
C. 策略模式
D. 抽象工厂模式
我的答案: D:抽象工厂模式;正确答案: D:抽象工厂模式;
2.7分
答案解析:抽象工厂模式应用
17. (单选题)关于工厂模式的陈述,以下有误的一项是( )。
A. 工厂模式隔离产品的创建和使用
B. 在工厂类中封装产品对象的创建细节,客户类无须关心这些细节
C. 工厂方去模式中的工厂方法可以改为静态方法
D. 工厂方法模式中抽象工厂声明的工厂方法返回抽象产品类型,不能返回具体产品类型
我的答案: C:工厂方去模式中的工厂方法可以改为静态方法;正确答案: C:工厂方去模式中的工厂方法可以改为静态方法;
2.7分
答案解析:工厂模式结构特点
18. (单选题)关于建造者模式中的Director类描述错误的是( )。
A. Director类隔离了客户类及生产过程
B. 在建造者模式中,客户类通过Director逐步构造一个复杂对象
C. Director类构建—个抽象建造者Builder子类的对象
D. Director与抽象工厂模式中的工厂类类似,负责返回一个产品族中的所有产品
我的答案: D:Director与抽象工厂模式中的工厂类类似,负责返回一个产品族中的所有产品;正确答案: D:Director与抽象工厂模式中的工厂类类似,负责返回一个产品族中的所有产品;
2.7分
答案解析:建造者模式角色功能
19. (单选题)以下关于建造者模式的叙述错误的是( )。
A. 建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
B. 建造者模式允许用户可以只通过指定复杂对象的类型和内容就可以创建它们,而不需要知道内部的具体构建细节
C. 当需要生成的产品对象有复杂的内部结构时可以考虑使用建造者模式
D. 在建造者模式中,各个具体的建造者相互之同有较强的依赖关系,可通过指挥者类组装成-个完整的产品对象返回给客户
我的答案: D:在建造者模式中,各个具体的建造者相互之同有较强的依赖关系,可通过指挥者类组装成-个完整的产品对象返回给客户;正确答案: D:在建造者模式中,各个具体的建造者相互之同有较强的依赖关系,可通过指挥者类组装成-个完整的产品对象返回给客户;
2.7分
答案解析:建造者模式优缺点
20. (单选题)当需要创建的新产品具有复杂的内部结构时,为了逐步构造完整的对象,并使得对象的创建更具弹性,可以使用( )。
A. 抽象工厂模式
B. 原型模式
C. 建造者模式
D. 单例模式
我的答案: C:建造者模式;正确答案: C:建造者模式;
2.7分
答案解析:建造者模式目的
21. (单选题)以下关于原型模式的叙述错误的是( )。改简答题
A. 原型模式通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办去创建出更多同类型的对象
B. 浅克隆仅仅复制所考虑的对象,而不复制它所引用的对象。也就是其中的成员对象并不复制
C. 在原型模式中实现深克隆时通常需要编写较为复杂的代码
D. 在原型模式中不需要为每一个类配备一个克隆方去,因此对于原型模式的扩展很灵活,对于已有类的改造也较为容易
我的答案: D:在原型模式中不需要为每一个类配备一个克隆方去,因此对于原型模式的扩展很灵活,对于已有类的改造也较为容易;正确答案: D:在原型模式中不需要为每一个类配备一个克隆方去,因此对于原型模式的扩展很灵活,对于已有类的改造也较为容易;
2.7分
答案解析:原型模式优缺点
22. (单选题)以下关于Java语言中clone()方去的使用错误的是( )。
A. 对于任何对象x,都有x.clone()== x
B. 对于任何对象x,都有x.clone().getClass()x.get Class()
C. 在子类的clone()方法中可以通过调用super.clone()来实现自我复制
D. 支持浅克隆的类必须实现Cloneable接口,否则将抛出CloneNotSupportedException异常
我的答案: A:对于任何对象x,都有x.clone()
x;正确答案: A:对于任何对象x,都有x.clone()== x;
2.7分
答案解析:原型模式中的浅克隆
23. (单选题)某公司欲开发一个即时聊天软件,用户在聊天过程中可以与多位好友同时聊天,在私聊时将产生多个聊天窗口,在创建聊天窗口时为了提高效率,要求根据第-个窗口快速创建其他窗口。针对这种需示,采用( )最为恰当。
A. 享元模式
B. 单例模式
C. 原型模式
D. 组合模式
我的答案: C:原型模式;正确答案: C:原型模式;
2.7分
答案解析:原型模式应用
24. (单选题)在( )时可使用单例模式。
A. 隔离菜单项对象的创建和使用
B. 防止一个资源管理器窗口被实例化多次
C. 使用一个已有的查找算法而不相修改既有代码
D. 不能创建子类,需要扩展一个数据过滤类
我的答案: B:防止一个资源管理器窗口被实例化多次;正确答案: B:防止一个资源管理器窗口被实例化多次;
2.7分
答案解析:单例模式应用特点
25. (单选题)以下关于单例模式的描述,正确的是( )。
A. 它描述了只有-个方法的类的集合
B. 它能够保证一个类只产生一个唯一的实例
C. 它描述了只有一个属性的类的集合
D. 它能够保证一个类的方法只能被-个唯一的类调用
我的答案: B:它能够保证一个类只产生一个唯一的实例;正确答案: B:它能够保证一个类只产生一个唯一的实例;
2.7分
答案解析:单例模式定义
26. (单选题)( )限制了创建类的实例数量。
A. 原型模式
B. 建造者模式
C. 策略模式
D. 单例模式
我的答案: D:单例模式;正确答案: D:单例模式;
2.7分
答案解析:单例模式功能特点
27. (单选题)以下( )不是单例模式的要点。
A. 某个类只能有一个实例
B. 单例类不能被继承
C. 必须自行创建单个实例
D. 必须自行向整个系统提供这个单例
我的答案: B:单例类不能被继承;正确答案: B:单例类不能被继承;
2.7分
答案解析:单例模式特点
28. (单选题)某软件公司开发了一组加密类,在使用这些加密类时要采用简单工厂模式进行设计,为了减少类的个数,将工厂类和抽象加密类合并,基本UML类图如图所示,以下陈述错误的是( )。

A. 在类图中, Cipher类既充当抽象产品类,又充当工厂类
B. 工厂方法createCipher()的返回类型为Cipher
C. 工厂方法createCipher()定义为静态方法
D. Cipher类中的encrypt()方法必须为抽象方法
我的答案: D:Cipher类中的encrypt()方法必须为抽象方法;正确答案: D:Cipher类中的encrypt()方法必须为抽象方法;
2.7分
答案解析:工厂方法模式应用
29. (单选题)( )设计模式提供了一个创建一系列相关或相互依赖对象的接口,而无须指定
它们的具体的类。
A. Adapter(适配器)
B. Singleton(单例)
C. Abstrac Factory(抽象工厂)
D. Template Method(模板方法)
我的答案: C:Abstrac Factory(抽象工厂);正确答案: C:Abstrac Factory(抽象工厂);
2.7分
答案解析:抽象工厂模式目的
30. (单选题)( )设计模式将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。
A. Builder(建造者)
B. Factory Method(工厂方法)
C. Prototype(原型)
D. Facade(外观)
我的答案: A:Builder(建造者);正确答案: A:Builder(建造者);
2.7分
答案解析:建造者模式定义
31. (单选题)某银行系统采用工厂模式描述其不同账户之间的关系,设计出的类图如图所示。其中与工厂模式中的“Product”角色相对应的类是( )。

A. Bank
B. Account
C. Checking
D. Savings
我的答案: B:Account;正确答案: B:Account;
2.7分
答案解析:工厂模式结构角色划分
二. 填空题(共6题,16.3分)
32. (填空题)某系统提供一个简单计算器,具有简单的加法和减法功能,系统可以根据用户的选择实例化相应的操作类。现使用简单工厂模式设计该系统,类图如下所示:

在图中,Operation是抽象类,其中定义了抽象方法getResult(),其子类AddOperation 用于实现加法操作,SubOperation用于实现减法操作。Calculator是简单工厂类,工厂方法为crcateOperation(),该方法接收一个char类型的字符参数,如果传入的参数为“+”,工厂方法返回一个AddOperation类型的对象,如果传入的参数为“-”,则返回-个SubOpcration类型的对象。
请完成以下Java代码中的填空。
【Java代码】
abstract class Operation {
protected int numberA;
protected int numberB;
//numberA和numberB的Setter方法和Getter方法省略
public __①__int getResult();
}

class AddOperation extends Operation{
public int getResult(){
return numberA + numberB;
}
}

class SubOperation extends Operation{
public int getResult(){
return numberA - numberB;
}
}

class Calculator{
public __②__createOperation(char operator){
Operation op = null;
{
case ‘+’:
op = ;
break;
case ‘-’:
op = ;
break;
}
;
}
}

class Test{
public static void main(String args[]){
int result;
Operation op1 = Calculator.createOperation(‘+’);
op1.setNumberA(20);
op1.setNumberB(10);
result = ;
System.out.println(result);
}
}
我的答案:
2.7分
(1) abstract
(2) static Operation
(3) switch(operator)
(4) new AddOperation()
(5) new SubOperation()

(6) return op

(7) op1.getResult()
正确答案:
(1) abstract
(2) static Operation
(3) switch(operator)
(4) new AddOperation()
(5) new SubOperation()
(6) return op
(7) op1.getResult()
33. (填空题)
某软件公司要开发一个数据格式转换工具,可以将不同数据源如txt文件、数据库、Excel表格中的数据转换成XML格式。为了让系统具有更好的可扩展性,在未来支持新类型的数据源,开发人员使用工厂方法模式设计该转换工具的核心类。在工厂类中封装了具体转换类的初始化和创建过程,客户端只须使用工厂类即可获得具体的转换类对象,再调用其相应方法实现数据转换操作。其类图如下所示:

在图中,ConvertorCreator是抽象工厂接口,它声明了工厂方法getConvertor(),在其子类中实现该方法,用于创建具体的转换对象;Convertor是抽象产品接口,它声明了抽象数据转换方法transform(),在其子类中实现该方法,用于完成具体的数据转换操作。类DBConvertor和TXTConvertor分别用于将数据库中的数据和TXT文件中的数据转换为XML格式。
请完成以下Java代码中的填空及后面选择填空。
【Java代码】
interface ConvertorCreator {
;
}
interface Convertor {
public String transform();
}
class DBConvertorCreator implements ConvertorCreator{
public Convertor getCovertor(){
__;
}
}
class TXTConvertorCreator implements ConvertorCreator{
public Convertor getCovertor(){
__;
}
}
class DBConvertor implements Convertor{
public String transform(){
//实现代码省略
}
}
class TXTConvertor implements Convertor{
public String transform(){
//实现代码省略
}
}
class Test{
public static void main(String[] args) {
ConvertorCreator creator;
;
creator = new DBConvertorCreator();
convertor = __;
convertor.transform();
}
}
如果需要针对一种新的数据源进行数据转换,该系统至少需要增加__⑥__个类。工厂方法模式体现了以下面向对象设计原则中的__⑦__(可以多选)。

A、开闭原则 B、依赖倒转原则 C、接口隔离原则 D、单一职现原则 E、合成复用原则

我的答案:
2.7分
(1) public Convertor getConvertor()
(2) return new DBConvertor()

(3) return new TXTConvertor()
(4) Convertor convertor
(5) creator.getConvertor()
(6) 2

(7) ABD
正确答案:
(1) public Convertor getConvertor()
(2) return new DBConvertor()
(3) return new TXTConvertor()
(4) Convertor convertor
(5) creator.getConvertor()
(6) 2
(7) ABD
34. (填空题)某手机游戏软件公司要推出一款新的游戏软件,该软件能够Symbian、Android和Windows Mobile等多个主流的手机操作系统平台,针对不同的手机操作系统,该游戏软件提供了不同的游戏操作控制类和游戏界面控制类,并提供相应的工厂类来封装这些类的初始化。软件要求具有较好的扩展性以支持新的操作系统平台,为了满足上述需求,采用抽象工厂模式进行设计所得类图如下所示:
请完成以下Java代码中(1)–(9)空的代码填写。

在该设计方案中,具体工厂类如SymbianFactory用于创建Symbian操作系统平台下的游戏操作控制类SymbianOperationController和游戏界面控制类SymbianInterfaceController,再通过它们的业务方法来实现对游戏软件的初始化和运行控制。完成如下Java代码中的填空及后面的分析填空。

【Java代码】
interface AbstractFactory{
public OperationController getOpenationController();
public InterfaceController getInterfaceController();
}
interface OperationController{
public void init();
//其他方法声明省略
}
interface InterfaceController{
public void init();
//其他方法声明省略
}
class SymbianFactory implements AbstractFactory{
public OperationController getOpenationController(){
;
}
public InterfaceController getInterfaceController(){
;
}
}
class AndroidFactory {
public OperationController getOpenationController(){
return new AndroidOperationController();
}
public InterfaceController getInterfaceController(){
return new AndroidInterfaceController();
}
}
class SymbianOperationController {
public void init(){
//实现代码省略
}
//其他方法声明省略
}
class AndroidOperationController
_{
public void init(){
//实现代码省略
}
//其他方法声明省略
}
class SymbianInterfaceController implements InterfaceController{
public void init(){
//实现代码省略
}
//其他方法声明省略
}
class AndroidInterfaceController implements InterfaceController{
public void init(){
//实现代码省略
}
//其他方法声明省略
}
class Test{
public static void main(String[] args) {
AbstractFactory af;
oc;
ic;
af = new SymbianFactory();
oc = ;
ic = ;
oc.init();
ic.init();
}
}

我的答案:
2.4分
(1) return new SymbianOperationController()
(2) return new SymbianInterfaceController()
(3) implements AbstractFactory
(4) implements OperationController
(5) implements OperationController
(6) OperationController
(7) IntefaceController
(8) af.getOperationController()
(9) af.getInterfaceController()
正确答案:
(1) return new SymbianOperationController();
(2) return new SymbianInterfaceController();
(3) implements AbstractFactory;
(4) implements OperationController;
(5) implements OperationController;
(6) OperationController;
(7) InterfaceController;
(8) af.getOperationController();
(9) af.getInterfaceController();
35. (填空题)某软件公司要开发一个音频和视频播放软件,为了给用户使用提供方便,该播放软件提供了多种界面显示模式,如完整模式、精简模式、记忆模式、网络模式等。在不同的显示模式下主界面的组成元素有所差异,如在完整模式下将显示菜单、播放列表、主窗口、控制条等,在精简模式下只显示主窗口和控制条,而在记忆模式下将显示主窗口、控制条、收藏条等,在精简模式下只显示主窗口和控制条,而在记忆模式下将显示主窗口、控制条、收藏列表等。现使用建造者模式设计该软件,所得类图如下所示:
请完成以下Java代码中的代码填空。

在该设计方案中,MainScreen是播放器的主界面,它是一个复合对象,包括菜单、播放列表、主窗口和控制条等成员。ModeBuilder是一个抽象类,定义了一组抽象方法buildXXX()用于逐步构造一个完整的MainScreen对象,getScreen()是工厂方法,用于返回一个构造好的MainScreen对象。ScreenModeController充当指挥者,用于指导复合对象的创建,其中construct()方法封装了具体创建流程,并向客户返回完整的产品对象。

【Java代码】
class MainScreen{
public String menu;
public String playList;
public String mainWindow;
public String controlBar;
}
①__class ModeBuilder{
protected MainScreen screen = new MainScreen();
public abstract void buildMenu();
public abstract void buildPlayList();
public abstract void buildMainWindow();
public abstract void buildControlBar();
public MainScreen getScreen(){
;
}
}
class FullModeBuilder extends ModeBuilder{
public void buildMenu(){//实现代码省略}
public void buildPlayList(){//实现代码省略}
public void buildMainWindow(){//实现代码省略}
public void buildControlBar(){//实现代码省略}
}
class SimpleModeBuilder extends ModeBuilder{
public void buildMenu(){//实现代码省略}
public void buildPlayList(){//实现代码省略}
public void buildMainWindow(){//实现代码省略}
public void buildControlBar(){//实现代码省略}
}
class ScreenModeController{
private ModeBuilder mb;
public void setModeBuilder(){
this.mb = mb;
}
public MainScreen construct(){
MainScreen ms;
mb.buildMenu();
mb.buildPlayList();
mb.buildMainWindow();
mb.buildControlBar();
ms = ;
return ms;
}
}
class Test{
public static void main(String[] args) {
ScreenModeController smc =
;
ModeBuilder mb;
mb = new FullModeBuilder();//构造完整模式界面
MainScreen screen;
smc.setModeBuilder();
screen = ;
System.out.println(screen.menu);
//其他代码省略
}
}
我的答案:
2.7分
(1)
abstract

(2) return screen
(3) ModeBuilder mb
(4) mb.getScreen()
(5) new ScreenModeController()
(6) mb
(7) smc.construct()
正确答案:
(1) abstract
(2) return screen
(3) ModeBuilder mb
(4) mb.getScreen()
(5) new ScreenModeController()
(6) mb
(7) smc.construct()
36. (填空题)某数据处理软件需要增加一个图表复制功能,在图表对象中包含一个数据集对象,用于封装待显示的数据,可以通过界面的“复制”按钮将该图表复制一份,复制后可以得到新的图表对象,用户可以修改新图表的编号、颜色和数据。现使用原型模式设计该软件,所得类图如下所示:
请完成以下Java代码中的代码填空,以及执行后的填空。

在该设计方案中,DataChart类包含一个DataSet对象,在复制DataChart对象的同时将复制DataSet对象,因此需要使用深克隆技术,可以用流来实现深克隆。

【Java代码】
import java.io.*;
class DataSet implements Serializable{
//具体实现代码省略
}
class Color implements Serializable{
//具体实现代码省略
}
class DataChart implements Serializable{
private DataChart ds = new DataChart();
private Color color = new Color();
private int no;
//成员属性的Getter方法和Setter方法省略
public void display(){
//具体实现代码省略
}
//使用流实现深克隆,复制容器的同时复制成员
public ___①_deepClone() throws IOException,ClassNotFoundException,OptionalDataException{
//将对象写入流中
ByteArrayOutputStream bao = new ByteArrayOutputStream();
ObjectOutputStream oos = new __;
oos.writeObject();
//将对象从流中取出
ByteArrayInputStream bis = new ByteArrayOutputStream(bao.toByteArray());
ObjectInputStream ois = new ;
return();
}
}
class Test{
public static void main(String[] args) {
DataChart chart1,chart2 = null;
chart1 = new DataChart();
try{
chart2 = (DataChart)chart1.deepClone();
}catch (Exception e){
e.printStackTrace();
}
System.out.println(chart1 == chart2);
System.out.println(chart1.getDs() == chart2.getDs());
System.out.println(chart1.getNo() == chart2.getNo());
}
}
编译并运行上述代码,输出结果为:()()()。
在本实例中,DataChart类和DataSet类需要实现Serializable接口的原因是(
)。
我的答案:
2.4分
(1) Object
(2) ObjectOutputStream(bao)
(3) this
(4) ObjectInputStream(bis)
(5) ois.readObject()
(6) false
(7) fasle
(8) true
(9) 只有实现了Serializable接口类的对象才能写入流中
正确答案:
(1) Object
(2) ObjectOutputStream(bao)
(3) this
(4) ObjectInputStream(bis)
(5) ois.readObject()
(6) false
(7) false
(8) true
(9) 只有实现了Serializable接口类的对象才能写入流中
37. (填空题)为了避免监控数据显示不一致并节省系统资源,在某监控系统的设计方案中提供了一个主控中心类,该主控中心类使用单例模式进行设计,类图如下图所示:
请完成以下Java代码中(1)–(3)空的代码填写,以及执行后(4)–(7)空填写。

在图中,主控中心类MainControllerCenter是单例类,它包含一系列成员对象并可以初始化、显示和销毁成员对象,对应的方法分别为init()、load()和destroy(),此外还提供了静态工厂方法getInstance()用于创建MainControllerCenter类型的单例对象。完成下列Java代码中的填空,以及后面的分析填空。
【Java代码】
class MainControllerCenter {
private Menu menu; //主控中心菜单
private ToolBar tb; //主控中心工具栏
private MainForm mf; //主控中心主窗口
private __①__MainControllerCenter mcc;
MainControllerCenter{

 }
 public void init(){
     menu = new Menu();
     tb = new ToolBar();
     mf = new MainForm();
 }    
 public void load(){
     menu.display();
     tb.display();
     mf.display();
 }
 public void destroy(){
     menu.destroy();
     tb.destroy();
     mf.destroy();
 }
 public static MainControllerCenter getInstance(){
     if(mcc == null){
         __③__;    
     }
     return mcc;
 }

}
class Test{
public static void main(String args[]){
MainControllerCenter mcc1,mcc2;
mcc1 = MainControllerCenter.getInstance();
mcc2 = MainControllerCenter.getInstance();
System.out.println(mcc1 == mcc2);
}
}
//其他代码省略
编译并运行上述代码,输出结果为( )。
在本实例中,使用了( )(填写懒汉式或饿汉式)单例模式,其主要优点是( ),主要缺点是( )。
我的答案:
2分
(1) static
(2) private
(3) mcc=new MainControllerCenter()
(4)
true

(5) 懒汉式
(6) 使用的时候在实例化,可以节约资源。
(7) 必须要处理好多线程访问的问题、速度和反应和时间相对“饿汉式”较慢
正确答案:
(1) static;
(2) private;
(3) mcc = new MainControllerCenter();
(4) true;
(5) 懒汉式;
(6) 使用的时候再实例化,可节约资源;
(7) 必须处理好多线程访问问题,速度和反应时间相对“饿汉式”较慢

你可能感兴趣的:({00}设计模式,设计模式,网络)