软件设计模式(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.docsj.com/doc/b1339023.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.docsj.com/doc/b1339023.html,e();
kw2=df.getKitchenWare(" 饭碗"); https://www.docsj.com/doc/b1339023.html,e();
kw3=df.getKitchenWare(" 杯子"); https://www.docsj.com/doc/b1339023.html,e();
kw4=df.getKitchenWare(" 杯子"); https://www.docsj.com/doc/b1339023.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 )模式:定义了一系列算法,并将每个算法封装起来,使
他们可以相互替换,且算法的改变不会影响到使用算法的客户。
⑶命令(Comman)d 模式:将一个请求封装为一个对象,使发出请求的责任和
执行请求的责任分割开。
⑷职责链(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) 可以选择使用适配器模式,参考类图如下所示:
软考软件设计师必做练习题及答案 软件设计师考试属于全国计算机技术与软件专业技术资格考试(简称计算机软件资格考试)中的一个中级考试。考试不设学历与资历条件,也不论年龄和专业,考生可根据自己的技术水平选择合适的级别合适的资格,但一次考试只能报考一种资格。考试采用笔试形式,考试实行全国统一大纲、统一试题、统一时间、统一标准、统一证书的考试办法。下面是希 赛小编整理的软考软件设计师考前必做的练习题。 试题一分析 本题主要考查类图和顺序图。 【问题 1】 需要分析此门禁系统的体系结构,根据体系结构的描述来看什么数据放在什么类中最 为合适。题目中提到:系统中的每个电控锁都有一个唯一的编号。锁的状态有两种:“已锁住”和“未锁住”。所以Lock 中含有锁编号和锁状态这两个属性。又因为题中有:在主机 上可以设置每把锁的安全级别以及用户的开锁权限。只有当用户的开锁权限大于或等于锁的 安全级并且锁处于“已锁住”状态时,才能将锁打开。因此,Lock 中还有锁的安全级别。 【问题 2】 首先,( 1 )、( 2 )是 FingerReader和LockController之间的交互。所以我们看题 目中是如何描述他们的交互的。题目中有“指纹采集器将发送一个中断事件给锁控器,锁控器从指纹采集器读取用户的指纹”,所以(1)应填“中断事件”,( 2 )应填“读取指纹”。(3 )是主机与UserInfo的交互,从图2-35中可以看出,UserInfo中存储了用户的指纹信息和开锁权限,所以( 3 )应是从 UserInfo读取用户的指纹信息和开锁权限。(4)空应填“读取锁的安全级别”。( 5 )是 MainFrame向自己发送的一条消息,从题目中的“主 机根据数据库中存储的信息来判断用户是否具有开锁权限,若有且锁当前处于已锁住状态,
2019年上半年软件设计师上午试题及答案 1.计算机执行指令的过程中,需要由()产生每条指令的操作信号并将信号送往相应的部件进行处理,以完成指定的操作。 A.CPU的控制器 B.CPU的运算器 C.DMA控制器 D.Cache控制器 2.DMA控制方式是在()之间直接建立数据通路进行数据的交换处理。 A.CPU与主存 B.CPU与外设 C.主存与外设 D.外设与外设 3.CPU访问存储器时,被访问数据一般聚集在一个较小的连续存储区域中。若一个存储单元已被访问,则其邻近的存储单元有可能还要被访问,该特性被称为() A.数据局部性 B.指令局部性 C.空间局部性 D.时间局部性 4.某系统由3个部件构成,每个部件的千小时可靠度都为R,该系统的千小时可靠度为(1-(1-R)2)R,则该系统的构成方式是()。 A.3个部件串联
B.3个部件并联 C.前两个部件并联后与第三个部件串联 D.第一个部件与后两个部件并联构成的子系统串联 5.在()校验方法中,采用模2运算来构造校验位。 A.水平奇偶 B.垂直奇偶 C.海明码 D.循环冗余 6.以下关于RISC (精简指令系统计算机)技术的叙述中,错误的是()。 A.指令长度固定、指令种类尽量少 B.指令功能强大、寻址方式复杂多样 C.增加寄存器数目以减少访存次数 D.用硬布线电路实现指令解码,快速完成指令译码 7.()防火墙是内部网和外部网的隔离点,它可对应用层的通信数据流进行监控和过滤。 A.包过滤 B.应用级网关 C.数据库 D.WEB 8.下述协议中与安全电子邮箱服务无关的是()。 A.SSL
B.HTTPS C.MIME D.PGP 9-10.用户A和B要进行安全通信,通信过程需确认双方身份和消息不可否认。A 和B通信时可使用()来对用户的身份进行认证;使用()确保消息不可否认。 A.数字证书 B.消息加密 C.用户私钥 D.数字签名 A.数字证书 B.消息加密 C.用户私钥 D.数字签名 11.震网(Stuxnet)病毒是一种破坏工业基础设施的恶意代码,利用系统漏洞攻击工业控制系统,是一种危害性极大的()。 A.引导区病毒 B.宏病毒 C.木马病毒 D.蠕虫病毒 12.刘某完全利用任职单位的实验材料、实验室和不对外公开的技术资料完成了一项发明。以下关于该发明的权利归属的叙述中,正确的是()。
设计模式期中考试试题 一:单项选择(共20道,每道2分) 1、设计模式一般用来解决什么样的问题( ) A.同一问题的不同表相B不同问题的同一表相 C.不同问题的不同表相 D.以上都不是 2、下列属于面向对象基本原则的是( ) A.继承 B.封装 C.里氏代换D都不是 3、Open-Close原则的含义是一个软件实体( ) A.应当对扩展开放,对修改关闭. B.应当对修改开放,对扩展关闭 C.应当对继承开放,对修改关闭 D.以上都不对 4、当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用()模式。 A.创建型 B.结构型C行为型D.以上都可以 5、要依赖于抽象,不要依赖于具体。即针对接口编程,不要针对实现编程,是( )的表述 A.开-闭原则 B.接口隔离原则 C.里氏代换原则 D.依赖倒转原则 6、设计模式的两大主题是( ) A.系统的维护与开发 B 对象组合与类的继承 C.系统架构与系统开发 D.系统复用与系统扩展 7、“不要和陌生人说话” 是( )原则的通俗表述 A.接口隔离 B.里氏代换 C.依赖倒转 D.迪米特:一个对象应对其他对象尽可能少的了解 8、构造者的的退化模式是通过合并()角色完成退化的。 A.抽象产品B产品C创建者D使用者 9、以下关于简单工厂模式叙述错误的是() A 它属于GoF23种设计模式 B 它是最简单的设计模式之一 C 它是学习其他创建型模式的基础 D 它只需要记住一个简单的参数即可获得所需对象的实例 E 它类中的方法通常为静态方法 F 它返回的类都有一个公共的父类和公共的方法 10、对象适配器模式是()原则的典型应用。 A.合成聚合复用原则 B.里式代换原则 C.依赖倒转原则 D.迪米特法则 D.以上表述全部错误。 11.对于依赖倒转的表述错误的是() A.依赖于抽象而不依赖于具体,也就是针对接口编程。 B.依赖倒转的接口并非语法意义上的接口,而是,一个类对其他对象进行调用时,所知道的方法集合。 C.从选项B的角度论述,一个对象可以有多个接口。 D.实现了同一接口的对象,可以在运行期间,顺利地进行替换。而且不必知道所示用的对象是那个实现类的实例。 E.此题没有正确答案。 12. 现有5个产品族,分布于3各不同的产品等级结构,只要指明一个产品所处的产品族以及它所在的等级结构,就可以唯一地确认这个产品。那么使用抽象工厂方法模式只需要提供
设计模式试题 一.选择 1. 设计模式具有的优点()。 A.适应需求变化 B.程序易于理解 C.减少开发过程中的代码开发工作量 D.简化软件系统的设计 2. 设计模式一般用来解决什么样的问题( )。 A.同一问题的不同表相 B 不同问题的同一表相 C.不同问题的不同表相 D.以上都不是 3. 设计模式的两大主题是( )。 A.系统的维护与开发 B.对象组合与类的继承 C.系统架构与系统开发 D.系统复用与系统扩展 4. 以下哪些问题通过应用设计模式不能够解决。() A)指定对象的接口B)针对接口编程 C)确定软件的功能都正确实现D)设计应支持变化 二.填空 1. 模式的基本要素包括名称、意图、问题、解决方案、参与者和协作者、(效果)、实现、GoF 参考。 2. 设计模式基本原则包括:开闭原则,(从场景进行设计的原则),包容变化原则。 3. 设计模式是一个(抽象)的方案,它可以解决一类问题。 4. 1. 在设计模式群体中,效果是指(原因和结果)。三. 判断 1. 适配器模式属于创建型模式。错 2. 在设计模式中,“效果”只是指“原因和结果”。对 3. 设计模式使代码编制不能真正工程化。错 4. 设计模式的两大主题是系统复用与系统扩展。对四. 名词解释 1. 设计模式 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 2. 模板 模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 3. 模式 就是解决某一类问题的方法论。把解决某类问题的方法总结归纳到理论高度,那就是模式。 4. 内聚度 模块内部各成分彼此结合的紧密程度。五.简答 题 1. 什么是设计模式?设计模式的目标是什么?设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码 设计经验的总结。使用设计模式是为了可 重用代码、让代码更容易被他人理解、保证代码可靠性。 2. 设计模式的基本要素有哪些? 名称,意图,问题,解决方案,参与者和协作者,效果,实现,GOF 参考。 3. 设计模式中一般都遵循的原则有什么? 开-闭原则,根据场景进行设计原则,优先组合原则,包容变化原则。 4. 四人团针对“创建优秀面向对象设计”建议了哪些策略? 针对接口编程,优先使用对象组合而不是类继承,找到并封装变化点。 第6 章 facade(外观)模式 一.选择 1. 外观模式的作用是()。A.当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些 额外的功能。B.为了系统中的一组功能调用提供一个一致的接口,这个接口使得这一子系统更 加容易使用。
2019下半年软件设计师考试真题及答案-上午卷 1、在cpu内外常需设置多级高速缓存cache,主要目的是()。 A、扩大主存的存储容量 B、提高cpu访问主存数据或指令的效率 C、扩大存储系统的存量 D、提高cpu访问内外存储器的速度 答案:D(如果D中没有“内”则选B) 2、某系统的可靠性结构框图如下图所示,假设部件1、2、3的可靠度分别为;;(部件2、3为冗余系统)若要求该系统的可靠度不小于,则进行系统设计时,部件4的可靠度至少应为()。 答案:A 3、计算机运行过程中,进行中断处理时需保存现场,其目的是()。 A、防止丢失中断处理程序的数据 B、防止对其他程序的数据造成破坏 C、能正确返回到被中断的程序继续执行 D、能为中断处理程序提供所需的数据 答案:C 4、内存按字节编址,地址从A0000H到CFFFFH的内存,共存()字节,若用存储容量为64k*8bit的存储器芯片构成该内存空间,至少需要()片。 A、80k B、96 k C、160 k D、192 k A、2 B、3 C、5 D、8 答案:D、B 5、执行指令时,将每一节指令都分解为取指、分析和执行三步,已知取指时间t取指=5△t,分析时间t分析= 2△t.执行时间t执行= 3△t如果按照重叠的流水线方式执行指令,从头到尾执行完500条指令需()△t. A、2500 B、2505 C、2510 D、2515 答案:B 6、下列协议中,与电子邮箱服务的安全性无关的是() A、SSL B、HTTPS C、MIME D、PGP 答案:C
7、下列算法中,不属于公开密钥加密算法的是()。 A、ECC B、DSA C、RSA D、DES 答案:D 8、kerberos系统中可通过在报文中加入()来防止重放攻击。 A、会话密钥 B、时间戳 C、用户ID D、私有密钥 答案:B 9、某电子商务网站向CA申请了数字证书,用户可以通过使用()验证()的真伪来确定该网站的合法性。 A、CA的公钥 B、CA的签名 C、网站的公钥 D、网站的私钥 A、CA的公钥 B、CA的签名 C、网站的公钥 D、网站的私钥 答案:A、B 10、李某受非任职单位委托,利用该单位实验室实验材料和技术资料开发了一项软件产品,对该软件的权利归属,表达正确的是()。 A、该软件属于委托单位 B、若该单位与李某对软件的归属有特别的约定,则遵从约定;无约定的原则上归属于李某 C、取决于该软件是否属于单位分派给李某的 D、无论李某与该单位有无特别约定,该软件属于李某 答案:B 11、李工是某软件公司的软件设计师,每当软件开发完成均按公司规定申请软件著作权,该软件的著作权()。 A、应由李工享有 B、应由公司和李工共同享有 C、应由公司享有 D、除署名权以外,著作权的其他权利由李工享有 答案:C 12、某考试系统的部分功能描述如下,审核考生报名表,通过审核的考生登录系统,系统自动为其生成一套试题,考试中心提供标准答案,问卷老师问卷,提交考生成绩,考生查看自己的成绩。若用数据流图对该系统进行建模,则()不是外部实体。. A、考生 B、考试中心 C、问卷老师 D、试题
2014年下半年软件设计师下午试题 试题:i 阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某大型披萨加工和销售商为了有效管理生产和销售情况,欲开发一披萨信息系统,其主要功能如下: (1)销售。处理客户的订单信息,生成销售订单,并将其记录在销售订单表中。销售订单记录了订购者、所订购的披萨、期望的交付日期等信息。 (2 )生产控制。根据销售订单以及库存的披萨数量,制定披萨生产计划(包括生产哪些披萨、生产顺序和生产量等),并将其保存在生产计划表中。 (3)生产。根据生产计划和配方表中的披萨配方,向库存发岀原材料申领单,将制作好的披萨的信息存入库存表中,以便及时进行交付。 (4)采购。根据所需原材料及库存量,确定采购数量,向供应商发送采购订单,并将其记录在采购订单表中;得到供应商的供应量,将原材料数量记录在库存表中,在采购订单表中标记已完成采购的订单。 (5)运送。根据销售订单将披萨交付给客户,并记录在交付记录表中。 (6 )财务管理。在披萨交付后,为客户开具费用清单,收款并岀具收据;依据完成的采购订单给供应商支付原材料费用并岀具支付细节;将收款和支付记录存入收支记录表中。 (7)存储。检查库存的原材料、拔萨和未完成订单,确定所需原材料。 现采用结构化方法对披萨信息系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示 的0层数据流图。 图1-1上下文数据流图
【问题1】(4分) 根据说明中的词语,给岀图【问题2】(5分) 根据说明中的词语,给岀图【问题3】(6分)1-1中的实体E1?E2的名称。 1-2中的数据存储D1?D5的名称。 图1-2 0层数数据流图 根据说明和图中词语,补充图1-2中缺失的数据流及其起点和终点
第5章设计模式 一.选择 1. 设计模式具有的优点()。 A.适应需求变化 B.程序易于理解 C.减少开发过程中的代码开发工作量 D.简化软件系统的设计 2. 设计模式一般用来解决什么样的问题( )。 A.同一问题的不同表相B不同问题的同一表相 C.不同问题的不同表相 D.以上都不是 3. 设计模式的两大主题是( )。 A.系统的维护与开发 B 对象组合与类的继承 C.系统架构与系统开发 D.系统复用与系统扩展 4. 以下哪些问题通过应用设计模式不能够解决。() A)指定对象的接口B)针对接口编程 C)确定软件的功能都正确实现D)设计应支持变化 解答: 1. A 2. A 3. D 4. C 二.填空 1. 模式的基本要素包括名称、意图、问题、解决方案、参与者和协作者、()、实现、G oF参考。 2. 设计模式基本原则包括:开闭原则,(),包容变化原则。 3. 设计模式是一个( )的方案,它可以解决一类问题。 4. 1. 在设计模式群体中,效果是指()。 解答: 1. 效果 2. 从场景进行设计的原则
3. 抽象 4. 原因和结果 三.判断 1. 适配器模式属于创建型模式。 2. 在设计模式中,“效果”只是指“原因和结果”。 3. 设计模式使代码编制不能真正工程化。 4. 设计模式的两大主题是系统复用与系统扩展。 解答: 1. 错 2. 对 3. 错 4. 对 四.名词解释 1. 设计模式 2. 模板 3. 模式 4. 内聚度 解答: 1. 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性 2. 模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 3. 就是解决某一类问题的方法论。把解决某类问题的方法总结归纳到理论高度,那就是模式。 4. 五.简答题 1. 什么是设计模式?设计模式的目标是什么?
软件设计模式复习题 1、熟悉每个设计模式的定义、模式UML图解、模式使用情形以及模式优缺点。 2、设计模式的两大主题是什么? 3、设计模式分成几大类?每大类各包含哪些模式? 4、为什么要使用设计模式?使用设计模式有哪些好处? 5、比较抽象工厂模式和工厂方法模式相似性和差异性。什么情况下使用抽象工厂模式?什 么情形下使用工厂方法模式? 6、简述原型模式中浅层克隆和深度克隆的区别?分别给出代码说明。 7、模板方法和普通的实现类继承抽象类方式有何区别? 8、是比较和分析适配器模式和桥接模式之间的共性和差异性。 9、请用组合模式实现学校人事管理模式。 10、综合应用装饰模式、命令模式和状态模式实现工具条命令按钮鼠标进入时高亮显示 状态以及鼠标单击按钮后呈现凹陷状态,表明当前按钮为选中状态。 11、请阐述享元模式是如何节省系统内存的?试举例分析使用享元模式前后的内存节 约之比。 12、使用解析器模式实现对学生成绩表的查询输入语句进行解析并执行查询,成绩表结 14、试比较和分析中介者模式和观察者模式之间的相似性和差异性?两者是否能够相 互转化? 15、模板方法和普通的抽象类继承有什么区别? 16、使用访问者模式对12题中的学生信息进行报到。 1、熟悉每个设计模式的定义、模式UML图解、模式使用情形以及模式优缺点。(见书)答:单件模式: ○1单例模式:class Singleton{private static Singleton instance; private Singleton(){} public static Singleton GetInstance(){if (instance == null) { instance = new Singleton();} return instance; } 客户端代码:class Program{static void Main(string[] args) { Singleton s1 = Singleton.GetInstance(); Singleton s2 = Singleton.GetInstance(); if (s1 = = s2) {Console.WriteLine("Objects are the same instance");} Console.Read();}} ○2多线程时的单例(Lock是确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放)class Singleton{private static Singleton instance; private static readonly object syncRoot = new object(); private Singleton(){} public static Singleton GetInstance(){lock (syncRoot) {
一.名词解释: 1.在软件工程中,对客观世界的问题领域进行抽象,并用某描述方法表示的结果称为模型。模型是现实系统的简化,它是抓住现实系统的主要方面而忽略次要方面的一种抽象,是对问题的书面上的、图形或文字的、无歧义的描述。人们常常在正式构造实物之前,首先建立一个简化的模型,以便更透彻地了解它的本质,抓住问题的要害。在模型中,人们总是剔除那些与问题无关的、非本质的东西,从而使模型与真实的实体相比更加简单、易于把握。 https://www.docsj.com/doc/b1339023.html,e Case(用例):在不展现一个系统或子系统内部结构的情况下,对系统或子系统的某个连贯的功能单元的定义和描述。一个Use Case表达了用户对系统的一项需求,也就是系统的一项责任或功能。 3.架构风格指一组原则。可以把它看成是一组为系统家族提供抽象框架的粗粒度模式。架构风格能改进分块,还能为频繁出现的问题提供解决方案,以此促进设计重用。软件体系架构风格是描述某一特定应用领域中系统组织方式的惯用模式。体系架构风格定义了一个系统家族,即一个体系架构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。体系架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。对软件体系结构风格的研究和实践促进对设计的重用,一些经过实践证实的解决方案也可以可靠地用于解决新的问题。例如,如果某人把系统描述为“客户/服务器”模式,则不必给出设计细节,我们立刻会明白系统是如何组织和工作的。 4.类(Class)是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。类通过接口与外界发生关系。 5.软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。是建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本和改进算法。其中,计算机科学、数学用于构建模型与算法,工程科学用于制定规范、设计范型(paradigm)、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。 二、 1.面向对象建模的大致过程如下: 用UML进行面向对象建模首先要描述总体需求。在这一阶段中主要是建立用例模型和静态模型,以搭建系统体系结构。用例图是系统的高级视图,要求按照面向对象的原则,站在功能划分的角度将系统要实现的行为划分为用例;以用例之间的动态交互及交互时间为依据产生顺序图;接下来就在用例图的基础上抽象出系统的类,明确各模块之间的关系以适当的粒度画出类图,其中也包括了与用例图的相互迭代修改在分析完模块的静态交互关系后继而要绘制出构件图。以上这些过程中均不考虑系统的具体实现,如建立什么样的数据库或采用什么语言编码等,最好是以使用者的眼光去分析系统功能。为建立完整的系统模型,还要对模块交互和构件细节做进一步分析,补充状态图、活动图、协作图和实施图等,从尽可能多的角度对复杂系统进行描述。在模型确定后就可以借助相应的支撑软件将模型导出为
软件设计模式(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中的类图有以下几种关系:依赖关 系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中泛化和实现的耦合度相等,它们是最强的。
软件设计模式期末考试大纲 名词解释: 1、云计算? 答:云计算是将计算机,存储等资源以服务的形式提供给外部客户,并根据使用情况付费的新型计算模式。云计算具有高可用、高可伸缩、高性能、能够随时随地地通过多种终端进行访问的特点,这为用户带来了极大的便利。2、三层结构的优缺点? 答: 优点:(1)具有良好的灵活性和可扩展性 (2)开发语言独立 (3)具有可共享性 (4)具有较好的安全性 (5)增强了企业对象的重复可用性 (6)成为了真正意义上的瘦客户端从而具备了很高的稳定性、延展性和执行效率。 (7)可以将服务集中在一起管理,统一服务于客户端。从而具备了良好的容错能力和负载平衡能力。 缺点: 1、全网多级投资计划建设,建设模式不尽相同,缺乏统一规划和管理,难以达到全网最优化设计; 2、用户与内容距离远,北方网络基本上是三级网络结构,网络结构层次和网络管理层次增多,导致IP不必要的路由跳数,使得网络的性能指标下降 3、加大了以后扩容成本和维护成本 4、网络是按行政区划进行网络设计和路由组织,不能根据用户的实际需求灵活的调整和调度网络资源,同时使我们业务开展成本和业务维护成本增加。尤其是给全网性增值业务的开放带来困难 5、在骨干网节点存在骨干网设备和省网设备的背靠背连接,投资有较大浪费 3,P2P? 答:p2p体系结构是一种非集中架构,即在网络中国没有服务器或客户端的概念。在p2p体系结构模式中,网络中的每一个结点都被认为是一个对等点,他们拥有相同的地位,任何一个结点都可以请求服务和提供服务,也就是说每一个结点都是客户端,每一个结点都是服务器。 4,web服务 Web service 一个被设计成支持网络上的计算机对计算机的可互操作的软件系统,它包含一个自瞄述的接口进行交互。它是基于互联网的、开放性、基于xml数据交换传输协议的企业应用web服务器是向发出请求的浏览器提供文档的程序web服务器是指驻留于因特网上某种类型计算机的程序 5,网格计算的概念
2014-2015学年第1学期 2012级《软件设计模式》考试试题(开卷) 考试时间:2014年 班级学号姓名 ?本试卷满分100分; ?请将答案写在答题纸上,写明题号,不必抄题,字迹工整、清晰; ?试题中使用C++语言作为描述语言,答题时可以使用C++或Java或C#程序设计语言中 的任意一种作为描述语言,但整个卷面只能使用其中一种,不得混合使用; ?请在答题纸和试题纸上都写上你的班级,学号和姓名,交卷时请将试题纸、答题纸和草纸 一并交上来。 一、单选题(共20分,每题2分) 1.类设计中,“变化是绝对的,稳定是相对的”,下列哪个不属于这句话中“变化”的范畴? (A) 改变函数参数的类型(B) 增加新的数据成员 (C) 改变编程语言(D) 改变对象交互的过程和顺序 2.Open-Close原则的含义是一个软件实体: (A) 应当对扩展开放,对修改关闭 (B) 应当对修改开放,对扩展关闭 (C) 应当对继承开放,对修改关闭 (D) 以上都不对 3.下列关于继承表述错误的是: (A) 继承是一种通过扩展一个已有类的实现,从而获得新功能的复用方法 (B) 泛化类(超类)可以显式地捕获那些公共的属性和方法。特殊类(子类)则通过附加 属性和方法来进行实现的扩展 (C) 破坏了封装性,因为这会将父类的实现细节暴露给子类 (D) 继承本质上是“白盒复用”,对父类的修改,不会影响到子类 4.下列关于对象组合/聚合,说法错误的是: (A) 容器类能通过被包含对象的接口来对其进行访问 (B) 属于黑盒复用,封装性好,因为被包含对象的内部细节对外是不可见 (C) 可以在运行时将被包含对象改变成同类型对象,从而改变容器类的行为效果,但没有 改变容器类的接口 (D) 比继承关系更加灵活,代价是相比继承关系,增强了类间的耦合度 5.用于分离接口和具体实现,使得接口和实现可独立变化的是: (A)适配器模式(B) 桥接模式(C) 命令模式(D)模板方法模式 6.体现“集中管理多个对象间的交互过程和顺序”的是: (A)生成器模式(B) 门面模式(C) 策略模式(D)中介者模式
软件体系结构-设计模式练习题1 1.面向对象分析与设计中的(1)是指一个模块在扩展性方面应该是开放的,而在更改性方面应该是封闭的;而(2)是指子类应当可以替换父类并出现在父类能够出现的任何地方。 (1) A.开闭原则 B.替换原则 C.依赖原则 D.单一职责原则 (2) A.开闭原则 B.替换原则 C.依赖原则 D.单一职责原则 2.(3)限制了创建类的实例数量,而(4)将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 (3) A.命令模式(Command)B.适配器模式(Adapter)C.策略模式(Strategy) D.单例模式(Singleton) (4) A.命令模式(Command) B.适配器模式(Adapter) C.策略模式(Strategy) D.单例模式(Singleton) 3. (5)设计模式允许一个对象在其内部状态改变时改变它的行为。下图为这种设计模式的类图,已知类State 为抽象类,则类(6)的实例代表了Context 对象的状态。 (5) A.单件(Singleton) B.桥接(Bridge) C.组合(Composite) D.状态(State) (6) A. Context B. ConcreteStateA C. Handle D. State
4.某公司欲开发一门户网站,将公司的各个分公司及办事处信息进行整合。现决定采用Composite设计模式来实现公司的组织结构关系,并设计了如下图所示的UML类图。图中与Composite模式中的“Component”角色相对应的类是(7) ,与“Composite”角色相对应的类是(8) 。 (7) A. Company B. FinanceDepartment C. HRDepartment D. ConcreteCompany (8) A. Company B. FinanceDepartment C. HRDepartment D. ConcreteCompany 5.某软件公司正在设计一个通用的嵌入式数据处理平台,需要支持多种数据处理芯片之间的数据传递与交换。该平台的核心功能之一要求能够屏蔽芯片之间的数据交互,使其耦合松散,并且可以独立改变芯片之间的交互过程。针对上述需求,采用(9)最为合适。 (9) A. 抽象工厂模式 B. 策略模式 C. 中介者模式D. 状态模式 6.某软件公司正在设计一个图像处理软件,该软件需要支持用户在图像处理中的撤销和重做等动作,为了实现该功能,采用(10)最为合适。 (10) A. 单例模式B. 命令模式 C. 访问者模式 D. 适配器模式 7.某互联网公司正在设计一套网络聊天系统,为了限制用户在使用该系统时发表不恰当言论,需要对聊天内容进行特定敏感词的过滤。针对上述功能需求,采用(11)能够灵活配置敏感 词的过滤过程。 (11) A. 责任链模式 B. 工厂模式 C. 组合模式 D. 装饰模式
烟台市“东方杯”计算机软件技能竞赛(试题共11页) 2007年月日软件设计师 (考试时间14:00~16:00共120 分钟) 请按下述要求正确填写答题纸 1.将问题答案写在答题纸上,并在指定位置填写准考证号和姓名。 2.答题纸上除填写上述内容外只能写解答。 3.本试卷总分75分,共包括两部分,第一部分为综合知识测试,共45分;第二部分,包括三个题目,共30分。 4.解答时字迹务必清楚,字迹不清时,将不评分。
第一部分:单向选择(每题1分共45分) 试题1、2 某机主存容量为16MB ,cache 容量为16KB ,主存与cache 每块都分为16B 主存与cache 地址变换采用直接映像方法。这种映像方法优点是算法简单,缺点是 (1) 。若访问主存单元为B4AF45H ,而且该单元已经装入cache,则cache 的地址是 (2) 。 供选择的答案: (1)、 A: 转换方法复杂 B: 转换速度较慢 C: cache 利用不充分 D: 转换方法不直观 (2)、 A: 34AFH B: 2F45H C: 4AF5H D: B4AFH 试题3、4 某计算机字长为32位,浮点表示时,阶码占8位,尾数占24位(各包含1位符号位),阶码用补码表示,尾码用原码表示,该浮点数能表示的最大正数是 (3) ,能表示的最小负数是 (4) 。 供选择的答案: (3)、A: ( )23 7122--? B: ()()2371221--?- C: ( )24 7 12 21--?- D: ()237122---? (4)、A: ( )23 7 122 ---? B: ( )()23 7 12 2 1--?- C: ( )24 7 122 --? D: ( )()23 7 12 21---?- 试题5、6 可维护性是评价软件质量的重要方面,系统的可维护性通常包括 (5) , (6) 维护是为了扩充软件的功能或提高原有软件的性能而进行的维护活动。 供选择的答案: (5)、 A: 可用性和可理解性 B:可修改性、数据独立性和数据一致性 C:可测试性和稳定性 D:可理解性、可修改性和可测试性 (6)、 A:改正性 B:完善性 C:适应性 D:合理性 试题7、8 形式语言是使用来描述模块具体 (7) 的非正式的比较灵活的语言,有点是接近 (8) 供选择的答案: (7)、 A:算法 B:结构 C:行为 D:状态 (8)、 A: 机器语言 B:汇编语言 C:高级语言 D:自然语言
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使用者 12、单子(单例,单态)模式类图结构如下: 下列论述中,关于”0..1”表述的不正确的是( d ) A.1表示,一个单例类中,最多可以有一个实例. B.”0..1”表示单例类中有不多于一个的实例 C.0表示单例类中可以没有任何实例 D.0表示单例类可以提供其他非自身的实例 13、对象适配器模式是( a )原则的典型应用。 A.合成聚合复用原则 B.里式代换原则 C.依赖倒转原则 D.迪米特法则 14、静态工厂的核心角色是(a) A.抽象产品 B.具体产品 C.静态工厂 D.消费者 15、下列关于静态工厂与工厂方法表述错误的是:( a ) A.两者都满足开闭原则:静态工厂以if else方式创建对象,增加需求的时候会修改源代码 B.静态工厂对具体产品的创建类别和创建时机的判断是混和在一起的,这点在工厂
东北大学继续教育学院 软件设计模式复习题 一:单选题 1.在c#程序中,入口函数的正确声明为:B A. static int main(){…..} B. static void Main(){……} void main(){……} Main(){……} 2.在C#中,表示一个字符串的变量应使用以下哪条语句定义?B A. CString str; B. string str; C. Dim str as string D. char * str; 3.结构化程序设计的3种结构是:D A. 顺序结构、if结构、for结构
B. if结构、if…else结构、else if结构 C. while结构、do…while结构、foreach结构 D. 顺序结构、分支结构、循环结构 4.能正确表示逻辑关系“a>=10 或a<=0”的C#语言表达式是____。D A. a>=10 or a<=0 B. a>=10|a<=0 C. a>=10&&a<=0 D. a>=10||a<=0 5.在类的外部可以被访问的成员是:A A. public成员 B. private成员 C. protected成员 D. protected internal成员 6.在定义类时,如果希望类的某个方法能够在派生类中进一步进行改进,以处理不同的派生类的需要,则应将该方法声明成_________。C A. sealed 方法 B. public 方法 C. visual 方法 D. override 方法 7.关于结构类型,下列说法哪些是正确的?A A. 结构是值类型 B. 结构中不允许定义带参数的实例构造函数; C. 结构中不允许定义析构函数 D. 结构中可以定义成员方法,但是方法内不能使用this 指针 8.下面是几条动态初始化二维数组的语句,指出其中正确的:D A. int arr5[][]=new int[4,5]; B. int[][] arr6 = new int[4, 5]; C. int arr7[,]=new int[4,5]; D. int[,] arr8=new int[4,5]; 9.下面有关析构函数的说法中,不正确的是:D
东大20秋学期《软件设计模式》在线平时作业1 注:本科目是东北大学课程资料,只做参考学习使用!! 一、单选题 (共 10 道试题,共 50 分) 1.分析下列程序: public class class4 { private string _sData = ""; public string sData{set{_sData = value;}} } 在Main 函数中,在成功创建该类的对象obj 后,下列哪些语句是合法的?() A.obj.sData = "It is funny!"; B.Console.WriteLine(obj.sData); C.obj._sData = 100; D.obj.set(obj.sData); 【正确选择是】:A 2.已知结构Resource 的定义如下: struct Resource{ public int Data = 0; } 则下列语句的运行结果为________。 Resource[] list= new Resource[20]; for(int i = 0;i<20;i++){ System.Console.WriteLine(“data={0}”,list[i].Data); } A.打印20 行,每行输出都是 data=0 B.打印20 行,每行输出都是 data=null C.打印20行.第1行输出data=0,第2行输出data=2,.,第20行输出data=19 D.出现运行时异常 【正确选择是】:A 3.已知a、b、c的值分别是4、5、6,执行下面的程序段后,判断变量n的值为:int a,b,c,n; if (c < b) n = a + b + c; else if (a + b < c) n = c - a - b; else n = a + b; A.3 B.-3 C.9 D.15 【正确选择是】:C
1.创建型模式的根本意图是把对象的创建和使用分离的责任进行分离,从而降低系统的耦合度 2.软件系统结构是软件设计过程中的一个层次,这一层次超越计算过程中的算法设计和数据结构设计 3.所有设计原则的目标都是为了使软件:降低耦合,增强灵活性。 4.AbstractFactory经常用工厂方法模式解决 5.设计模式中应该优先使用的复用技术是对象组合。 6.设计时应将可变部分封装起来。 7.抽象工厂模式和工厂方法模式之间的联系: 工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。 区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。 8.使用继承处理对象间的关系的模式:工厂方法、适配器、模板方法、解释器模式 9.迭代器设计模式根据谁控制迭代可以分为外部迭代器和内部迭代器 10.创建型设计模式抽象了实例化过程,一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。 11.可复用的面向对象设计的两大原则:针对接口编程、优先使用对象复合 12.使用单件模式所需要注意:1.多线程问题2.资源释放问题 13.设计模式一般用来解决同一问题不同表象的问题 14.在涉及模式中,效果是指原因和结果。 15.设计模式的两大主题是系统复用和系统扩展 16.适配器模式最常见的用法是保持多态,适配器模式让我们在设计时不需要担心接口问题 17.静态工厂的核心角色是抽象产品。 18.Abstract Factory类和具体工厂方法可以分离,每个具体工厂负责一个抽象工厂方法的实现 19.抽象工厂类通过为每个不同类型的对象定义一个方法,来指定实例化哪一个对象 20.抽象工厂定义接口,具体工厂实现某一接口 21.Abstract Factory将如何执行对象实例化规则从这些对象的客户对象提取出来 22.Abstract Factory的三个关键策略:发现并封装可变点;优先使用对象组合;针对接口设计,而不是针对实现设计 23.面向对象系统中功能复用的两种最常用技术是对象组合和类继承。 24.每个Drector对象都对其后的对象封装自己的新功能 25.装饰链始于一个component对象,终于concretecomponent对象 26.