对象电源适配器替换原则模式是什么原则的典型应用

设计模式试题(仅供参考)_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
设计模式试题(仅供参考)
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩10页未读,
定制HR最喜欢的简历
你可能喜欢  问题导入:比如有A型螺母和B型螺母,那么用户可以再A型螺母上直接使用按着A型螺母生产的A型螺丝,同样也可以在B型螺母上直接使用按着B型螺母标准生产的B型螺丝。但是由于A型螺母和B型螺母的标准不一样,用户在A型螺母上不能直接使用B型的螺丝,反之也一样。该如何达到这个目的呢?
  使用适配器就可以解决这个问题:生产一种&A型螺母适配器&,这种A型螺母适配器的前端符合A型螺母标准要求,可以拧在A型螺母上,后端又焊接了一个B型螺母。这样用户就可以借助A型螺母适配器在A型螺母上使用B型的螺丝了。
  适配器模式又称为包装器,是用来将一个类的接口转换成客户希望的另外一个接口。这可以使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式的关键是建立一个适配器,这个适配器实现了目标接口并且包含了被适配者的引用。
  适配器模式的三种角色:
  一、目标:目标是一个接口,该接口是客户想要使用的接口。
  二、被适配者:被适配者是一个已经存在的接口或抽象类,这个接口接口或者抽象类需要适配。
  三、适配器:适配器是一个类,该类实现了目标接口并且包含有被适配者的引用,即适配器的职责是对适配者接口或抽象类与目标接口进行适配。
  以下通过一个简单的问题来描述适配器模式中所涉及的各个角色。
  用户已经有一个两厢的插座,但是最近用户又有了一个新的三厢插座。用户现有一台洗衣机和一台电视机,洗衣机是三厢插头,而电视机是两厢插头。现在用户想用心的三厢插座来使用洗衣机和电视机,即用心的三厢插座为洗衣机和电视机接通电流。
  针对以上问题,使用适配器模式设计若干个类。
  1.目标
  本问题是使用三厢插座来为电视机和洗衣机接通电流,所以目标是三厢插座。把三厢插座设置为一个接口:
1 package com.
3 //适配目标:三相插座
4 public interface ThreeElectricOutlet {
void connectElectricCurrent();
  2.被适配者
  对于本问题,用户是想要用三厢插座为两厢插头的电视机接通电流,所以被适配者应该是两厢插座,也设置为一个接口:
1 package com.
3 //被适配者:两相插座
4 public interface TwoElectricOutlet {
void connectElectricCurrent();
  3.适配器
  该适配器实现了目标接口三厢插座ThreeElectricOutlet,同时又包含了两厢插座TwoElectricOutlet的引用:
1 package com.
3 //适配器:实现目标接口
4 public class ThreeElectricAdapter implements ThreeElectricOutlet {
//适配器包含被适配者的引用
private TwoElectricO
public ThreeElectricAdapter(TwoElectricOutlet outlet) {
this.outlet =
public void connectElectricCurrent() {
outlet.connectElectricCurrent();
  下列应用程序中,Application.java使用了适配器模式中所涉及的类,应用程序负责用Wash类创建一个对象来模拟一台洗衣机,使用TV类创建一个对象来模拟一台电视机
使用ThreeElectricOutlet接口变量调用Wash对象的connectElectricCurrent()方法,并借助适配器调用TV对象的connectElectricCurrent()方法,即用三厢插座分别为洗衣机和电视机接通电流。
1 package com.
3 public class Application {
public static void main(String[] args) {
ThreeElectricO //目标接口(三相插座)
Wash wash = new Wash();
//洗衣机插在三相插座上
System.out.println("使用三相插座接通电流");
outlet.connectElectricCurrent();
//接通电流开始洗衣服
TV tv = new TV();
ThreeElectricAdapter adapter = new ThreeElectricAdapter(tv); //把电视插在适配器上面
//再把适配器插在三厢插座上
System.out.println("使用三厢插座接通电流");
outlet.connectElectricCurrent();
//接通电流,开始播放电视节目
18 //洗衣机使用三相插座
19 class Wash implements ThreeElectricOutlet{
public Wash() {
name = "黄河洗衣机";
public Wash(String name){
this.name =
public void connectElectricCurrent() {
public void turnOn(){
System.out.println(name+"开始洗衣服了");
36 //电视机使用两厢插座
37 class TV implements TwoElectricOutlet{
public TV() {
name = "长江电视机";
public TV(String name){
this.name =
public void connectElectricCurrent() {
public void turnOn(){
System.out.println(name+"开始播放电视节目");
运行结果为:
使用三相插座接通电流黄河洗衣机开始洗衣服了使用三厢插座接通电流长江电视机开始播放电视节目
下面举个双向适配器的例子
  在适配器模式中,如果Adapter角色同时实现目标接口和被适配者接口,并包含目标接口和被适配接口的引用,那么该适配器就是一个双向适配器。使用双向适配器,用户既可以用新的接口又可以用已有的接口。在以上例子中,如果用户希望能有三厢插座来接通洗衣机和电视机的电流,有可以用两厢插座来接通洗衣机和电视机的电流,那么就必须使用一个双向适配器。具体代码如下:
1 package com.
3 public class ThreeAndTwoElectricAdapter implements ThreeElectricOutlet,
TwoElectricOutlet {
private ThreeElectricOutlet threeElectricO
private TwoElectricOutlet twoElectricO
public ThreeAndTwoElectricAdapter(ThreeElectricOutlet threeOutlet,TwoElectricOutlet twoOutlet) {
threeElectricOutlet = threeO
twoElectricOutlet = twoO
public ThreeAndTwoElectricAdapter(TwoElectricOutlet twoOutlet,ThreeElectricOutlet threeOutlet){
threeElectricOutlet = threeO
twoElectricOutlet = twoO
public void connectElectricCurrent() {
if(this instanceof ThreeElectricOutlet){
twoElectricOutlet.connectElectricCurrent();//twoElectricOutlet是被适配的接口
if(this instanceof TwoElectricOutlet){
threeElectricOutlet.connectElectricCurrent(); //threeElectricOutlet是被适配的接口
public static void main(String[] args) {
ThreeElectricOutlet threeO
TwoElectricOutlet twO
Wash wash = new Wash();
TV tv = new TV();
ThreeAndTwoElectricAdapter adapter = new ThreeAndTwoElectricAdapter(wash,tv);
threeOutlet =
System.out.println("使用三厢插座接通电源");
threeOutlet.connectElectricCurrent();
twOutlet =
System.out.println("使用两厢插座接通电源");
twOutlet.connectElectricCurrent();
运行结果为:
使用三厢插座接通电源长江电视机开始播放电视节目黄河洗衣机开始洗衣服了使用两厢插座接通电源长江电视机开始播放电视节目黄河洗衣机开始洗衣服了
这样就实现了即可以用三厢插座又可以用两厢插座来为电视机和洗衣机接通电流了。
使用适配器模式主要有以下优点:
  1.目标和被适配者是完全解耦的关系。
  2.适配器模式满足&开--闭原则&,当添加一个实现了Adapter接口的新类时,不必修改Adapter,Adapter就能对这个新类的实例进行适配。
阅读(...) 评论()您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
大连海事大学 软件工程 期末试题库.doc 12页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
··········
········
适配器模式,分为类的适配器和对象的适配器两种实现。其中类的适配器采用的是()关系,而对象适配器采用的是()关系。创立型模式的根本意图是要把()和()的责任进行分离,从而降低系统的()。MVC模型的基本工作原理是基于()模式,实现是基于()模式设计模式的基本要素有(??? )。
当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用(?? )模式。当我们想将抽象部分和实现部分分离时,可以使用(?????? )模式。设计模式中应优先使用的复用技术是(????? )。ATAM中的场景分为 (
) 和考察场景。
C/S体系结构有三个主要组成部分:(
MVC模型的基本工作原理是基于()模式,实现是基于()模式设计模式的基本要素有(??)。设计模式中应优先使用的复用技术是(??? ??? )。ATAM中的场景分为 (
) 和考察场景。
C/S体系结构有三个主要组成部分:(
当我们想封装不同算法并使它们可相互替换时,可以使用(? )模式。设计模式的基本要素有(????? )。
32. 软设计模式中的效果(consequences) 描述了模式应用的(
33.根据“模式是用来完成什么工作的”准则对模式进行分类为:(
)型设计模式。
34.创建型模式抽象了(
)。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。随着系统演化得越来越依赖于(
)而不是类继承,创建型模式变得更为重要。创建型模式在(
)被创建, (
)创建它,它是(
)被创建的,以及(
)创建这些方面给予你很大的灵活性。
1. 在观察者模式中,表述错误的是(
) ??? A.观察者角色的更新是被动的。 ??? B.被观察者可以通知观察者进行更新 ??? C.观察者可以改变被观察者的状态,再由被观察者通知所有观察者依据被观察者的状态进行。 ??? D.以上表述全部错误。 . 对象组合的有点表述不当的是(
) ??? A. 容器类仅能通过被包含对象的接口来对其进行访问。 ??? B. “黑盒”复用,封装性好,因为被包含对象的内部细节对外是不可见。 ??? C. 通过获取指向其它的具有相同类型的对象引用,可以在运行期间动态地定义(对象的)组合 ??? D.造成极其严重的依赖关系。 . 对于依赖倒转的表述错误的是(
) ??? A.依赖于抽象而不依赖于具体,也就是针对接口编程。 ??? B.依赖倒转的接口并非语法意义上的接口,而是,一个类对其他对象进行调用时,所知道的方法集合。 ??? C.从选项B的角度论述,一个对象可以有多个接口。 ??? D.实现了同一接口的对象,可以在运行期间,顺利地进行替换。而且不必知道所示用的对象是那个实现类的实例。 ??? E.此题没有正确答案。 对象适配器模式是(
)原则的典型应用。 ??? A.合成聚合复用原则???? B.里式代换原则??? C.依赖倒转原则??????? D.迪米特法则 、设计模式一般用来解决什么样的问题() ??? A.同一问题的不同表相??? B不同问题的同一表相 ??? C.不同问题的不同表相??? D.以上都不是 、当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用(
)模式。 ??? A.创建型? B.结构型 C行为型 D.以上都可以 “不要和陌生人说话” 是()原则的通俗表述 ??? A.接口隔离?? B.里氏代换? C.依赖倒转?? D.迪米特:一个对象应对其他对象尽可能少的了解、要依赖于抽象,不要依赖于具体。即针对接口编程,不要针对实现编程,是()的表述 ??? A.开-闭原则 ??? B.接口隔离原则 ??? C.里氏代换原则 ??? D.依赖倒转原则Open-Close原则的含义是一个软件实体() ?
A.应当对扩展开放,对修改关闭. ??? B.应当对修改开放,对扩展关闭 ??? C.应当对继承开放,对修改关闭 ??? D.以上都不对 对于依赖倒转的表述错误的是( ) ??? A.依赖于抽象而不依赖于具体,也就是针对接口编程。 ??? B. ??? C. 抽象不应该依赖于细节。 ??? D.。 ??? E.此题没有正确答案。 ??? A. 模式其实就是解决某一类问题的方法论。 ??? B. ??? C. 模式对问题的描述以及对问题的解答应具有高度的抽象性和代表性。 ??? D.。
15、创建型模式在(
)方面给予你很大的灵活性。
A、 什么 被创建。
B、 谁 创建它。
C、它是 怎样 被创建的。
正在加载中,请稍后...一、选择题 1. 开放-关闭原则的含义是一个软件实体a。 (A)应当对扩展开放,对修改关闭(B)应当对修改开放,对扩展关闭 (C)应当对继承开放,对修改关闭(D)以上都不对 2. 下列属于面向对象设计基本原则的是( c) (A)继承(B)封装(C)里氏代换(D)都不是 3. 对于违反里式代换原则的两个类,可以采用的候选解决方案错误的是:(d) A.创建一个新的抽象类C,作为两个具体类的超类,将A 和B 共同的行为移动到C 中,从而解决A和B 行为不完全一致的问题。 B.将B到A的继承关系改组成委派关系。 C.区分是“IS-a”还是”Has-a”。如果是“Is-a”,可以使用继承关系,如果是”Has-a”应该改成委派关系 D.以上方案都错误 4. 关于继承表述错误的是:(d) A.继承是一种通过扩展一个已有对象的实现,从而获得新功能的复用方法。 B.泛化类(超类)可以显式地捕获那些公共的属性和方法。特殊类(子类)则通过附加属性和方法来进行实现的扩展。 C.破坏了封装性,因为这会将父类的实现细节暴露给子类。 D.继承本质上是“白盒复用”,对父类的修改,不会影响到子类。 5. 对于依赖倒转的表述错误的是() A.依赖于抽象而不依赖于具体,也就是针对接口编程。 B.依赖倒转的接口并非语法意义上的接口,而是,一个类对其他对象进行调用时,所知道的方法集合。 C.从选项B的角度论述,一个对象可以有多个接口。 D.实现了同一接口的对象,可以在运行期间,顺利地进行替换。而且不必知道所使用的对象是哪个实现类的实例。 6. 要依赖于抽象,不要依赖于具体。即针对接口编程,不要针对实现编程,是D的表述。 A.开-闭原则B.接口隔离原则C.里氏代换原则D.依赖倒转原则 7. 依据设计的基本原则,程序开发中应优先使用的是a关系实现复用。 A, 组合委派 B.继承 C创建 D.以上都不对 8. “不要和陌生人说话” 是D原则的通俗表述。 A.接口隔离 B.里氏代换 C.依赖倒转D.迪米特法则 9. 面向对象的六条基本原则包括:开闭原则,里式替换原则,合成聚合原则、依赖倒转、迪米特法则,以及b。 (A)单一职责原则、用户视角原则(B)单一职责原则、接口隔离原则 (C)接口隔离原则、易用性原则(D)接口隔离原则、用户视角原则 10. 11. 适配器模式,分为类的适配器和a的适配器两种实现。 (A)对象(B)用例(C)接口(D)抽象类 面向对象系统中功能复用的两种最常用技术是a。 (A)对象组合和类继承(B)复制和粘贴 (C)类继承和抽取方法(D)对象组合和抽取方法 12. 13. 14. 对象适配器模式是a原则的典型应用。 依据设计模式思想,程序开发中应优先使用a关系实现复用。 关于设计原则以下说法错误的是a (A) 合成聚合复用原则(B)里式代换原则(C)依赖倒转原则(D)迪米特法则 A组合
D扩展 A依赖倒置原则是指高层模块应该依赖于底层模块,两者都依赖于具体的实现 B里氏替换是说子类的行为必须与父类的行为保持一致 C单一职责原则是说只有一个可以让其改变的原因 D 迪米特法则的核心就是一个对象对其他对象有最少的了解 二、问答题 1. 请从接口隔离原则出发分析一下“看人下菜碟儿”这个说法的意义? 看客人是谁再提供不同档次的菜。从接口隔离原则的角度出发,根据客户需要的不同,而为不同的客户提供不同的服务 2. 在设计原则中,依赖倒置原则的主要内容是什么? A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。 B.抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
3. 请举例说明开放-关闭原则是如何应用的,并画出相应类图。
4. 请说明下面的一段代码,违反了什么设计原则,应如何修改。
答:违反了单一职责原则
5. 请优化下面的设计方案,使其能够不依赖于具体实现,并说明运用了什么设计原则。
答:依赖倒置原则
6. 请说明策略模式实际上应用了什么设计原则,并简单描述该原则的内容。 7. 请指出下图在设计上违反了什么原则,并给出优化方案。
答:接口隔离原则
8. 请指出下图违反了什么设计原则,并简单描述该原则的内容。
答:依赖倒置原则
9. 请指出下图违反了什么设计原则,并简单描述该原则的内容。
答迪米特法则
10. 企鹅(Penguin)有皮毛(hasFeather),有翅膀(hasWings),会下蛋(layEgg),但是不会飞行(fly)。因此企鹅是一种特殊的鸟类(Bird)。请仔细查看下面的设计方案,请指出这个方案违反了什么设计原则?请给出修改后的方案。 Bird-hasFeather-hasWings+layEgg()+fly()void fly(){
//do nothingPenguin}+fly() 里氏替换原则 (LSP) 把bird中fly()方法去掉 11. Sunny软件公司开发的CRM系统原先可以显示两种类型的图表,如饼状图(PieChart) 和柱状图(BarChart),后来用户希望系统能够支持更多种类的图表显示方式,例如增加LineChart,我们应该如何设计这个方案?请给出这个方案的类图,并用文字说明该方案的合理性。 通过抽象化的方式对系统进行重构,使之增加新的图表类时无须修改源代码,使之满足开闭原则。
(1) 增加一个抽象图表类AbstractChart,将各种具体图表类作为其子类; (2)
ChartDisplay类针对抽象图表类进行编程,由客户端来决定使用哪种具体图表。博客分类:
1、设计模式一般用来解决什么样的问题( a)
A.同一问题的不同表相
B不同问题的同一表相
C.不同问题的不同表相
D.以上都不是2、下列属于面向对象基本原则的是( c )
B.封装 C.里氏代换
D都不是3、Open-Close原则的含义是一个软件实体( a )
A.应当对扩展开放,对修改关闭.
B.应当对修改开放,对扩展关闭
C.应当对继承开放,对修改关闭
D.以上都不对4、当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用( a )模式。
B.结构型 C行为型 D.以上都可以5、要依赖于抽象,不要依赖于具体。即针对接口编程,不要针对实现编程,是( d )的表述
A.开-闭原则
B.接口隔离原则
C.里氏代换原则
D.依赖倒转原则
6、依据设计模式思想,程序开发中应优先使用的是( a )关系实现复用。
D.以上都不对
复用方式:继承和组合聚合(组合委派)7、设计模式的两大主题是( d )
A.系统的维护与开发
B 对象组合与类的继承
C.系统架构与系统开发
D.系统复用与系统扩展8、单子模式中,两个基本要点( a b )和单子类自己提供单例
A .构造函数私有
B.唯一实例
C.静态工厂方法
D.以上都不对9、下列模式中,属于行为模式的是( b )
A.工厂模式
以上都是10、“不要和陌生人说话” 是( d )原则的通俗表述
A.接口隔离
B.里氏代换
C.依赖倒转
D.迪米特:一个对象应对其他对象尽可能少的了解11、构造者的的退化模式是通过合并( c )角色完成退化的。
A.抽象产品
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.静态工厂对具体产品的创建类别和创建时机的判断是混和在一起的,这点在工厂方法中
C.不能形成静态工厂的继承结构
D.在工厂方法模式中,对于存在继承等级结构的产品树,产品的创建是通过相应等级结构的工厂创建的。16、在观察者模式中,表述错误的是( c )
A.观察者角色的更新是被动的。
B.被观察者可以通知观察者进行更新
C.观察者可以改变被观察者的状态,再由被观察者通知所有观察者依据被观察者的状态进行。
D.以上表述全部错误。17.对于违反里式代换原则的两个类,可以采用的候选解决方案错误的是:( d )
A.创建一个新的抽象类C,作为两个具体类的超类,将A 和B 共同的行为移动到C 中,从而解决A和B 行为不完全一致的问题。
B.将B到A的继承关系改组成委派关系。
C.区分是“IS-a”还是”Has-a”。如果是“Is-a”,可以使用继承关系,如果是”Has-a”应该改成委派关系
D.以上方案错误18.对象组合的有点表述不当的是( d )
A. 容器类仅能通过被包含对象的接口来对其进行访问。
B. “黑盒”复用,封装性好,因为被包含对象的内部细节对外是不可见。
C. 通过获取指向其它的具有相同类型的对象引用,
可以在运行期间动态地定义(对象的)组合
D.造成极其严重的依赖关系。19.关于继承表述错误的是:( d )
A.继承是一种通过扩展一个已有对象的实现,从而获得新功能的复用方法。
B.泛化类(超类)可以显式地捕获那些公共的属性和方法。特殊类(子类)则通过附加属性和方法来进行实现的扩展。
C.破坏了封装性,因为这会将父类的实现细节暴露给子类。
D.继承本质上是“白盒复用”,对父类的修改,不会影响到子类。20.对于依赖倒转的表述错误的是( e )
A.依赖于抽象而不依赖于具体,也就是针对接口编程。
B.依赖倒转的接口并非语法意义上的接口,而是,一个类对其他对象进行调用时,所知道的方法集合。
C.从选项B的角度论述,一个对象可以有多个接口。
D.实现了同一接口的对象,可以在运行期间,顺利地进行替换。而且不必知道所示用的对象是那个实现类的实例。
E.此题没有正确答案。21.面向对象的六条基本原则包括:开闭原则,里式代换原则,合成聚合原则以及
(依赖倒转),(迪米特法则),(单一原则),(接口隔离?)。22.在存在继承关系的情况下,方法向(超类)方向集中,而数据向(子类)方向集中。23.适配器模式,分为类的适配器和对象的适配器两种实现。
其中类的适配器采用的是(继承)关系,而对象适配器采用的是(组合聚合)关系。24.设计模式的基本要素有(名字 ),(意图 ),(问题 ),( 解决方案 ),(参与者与协作者 ),( 实现),(一般性结构)。25.创立型模式的根本意图是要把(对象的创建)和(使用分离)的责任进行分离,从而降低系统的(耦合度)。26.工厂模式分为(简单工厂),(工厂方法),(抽象工厂)三种类型27.门面模式是(迪米特)法则的典型运用28.MVC模型的基本工作原理是基于(观察者)模式,实现是基于(命令)模式29.设计模式的思想根源是(开闭)基本原则的宏观运用,本质上是没有任何模式的,
发现模式的人永远是大师,而死守模式的人,最对只能是一个工匠.
UML、设计模式(测试题)
不定项选择题:1.一个软件产品是否成功,因素有(
需求收集是否正确l
体系结构的构建是否合理l
测试是否完全l
软件的管理 2.开发过程中最困难的一个环节是(
)。人与人之间的交流
3.用例是从(
)的观点对系统行为的一个描述。4.顺序图所表达的是基于(
)的动态交互。5.当需要在项目中定制自己的元素时,可使用(
构造型来定制
)。6.表示一个操作中的参数和返回值的数据类型的称呼是( 形构
)。7.多重性5,10表示(
)。8.在找出了类的继承关系后,通常可以用(
)来表示最上层的基类。9.UML中的实现是一种特殊类型的继承,因为它是指从一个(
)继承。10.使用用例的难点在于(
用例中各个场景的具体步骤
)。11.收集用例的方法是(
)。12.产生类图和得到用例这两个步骤,位于前面的是( 没有固定顺序
)。13.面向对象理论中,对象之间发送信号,在UML状态图里就是(
)。14.顺序图中,动态创建对象表示法的特点是(是在时间线上的某一点创建,结束时尾部打X)。15.当代软件工程的特点是(
允许各个阶段进行迭代l
各个阶段没有明显的分界线l
允许后期得到的信息返回,使得早期的能够被修改 。16.GRAPPLE中最重要的段是(
测试17.设计模式的基本要素有(
名称,目的(意图),解决方案,实施后达到的效果
)。18.当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用(
)模式。19.当我们想将抽象部分和实现部分分离时,可以使用(
)模式。20.当我们想用不同的请求对客户进行参数化时,可以使用(
)模式。21.当我们想封装不同算法并使它们可相互替换时,可以使用(
策略 )模式。22.面向对象系统中功能复用的两种最常用技术是(
对象组合(优先使用)l
类继承(限制使用类继承)-&产生类爆炸 23.面向对象系统中的“黑盒复用”是指(
)。24.对象组合是通过获得(
抽象类的指针
)而在运行时刻动态定义的。25.设计模式中应优先使用的复用技术是(
)。26.在Lexi系统中,我们把所有文档元素都看作是图元,这样,它们就有了相同的(
接口(也叫类型)
)。27.Lexi系统中,我们之所以能对文档采用Composite模式,是因为文档的元素之间有(
递归 (树型结构)
)关系。填空题:1.软件体系结构是指一个系统的有目的的设计和规划,这个设计规划既不描述
,也不描述
系统怎样开发
,它只描述系统的
及其相互的
。2.一个UML模型只描述了一个系统
,它并没告诉我们系统是
。3.接口是可以在整个模型中反复使用的一组行为,是一个没有
而只有 方法
的类。4.多重性指的是,某个类有
多个 个对象可以和另一个类的
对象关联。5.当一个类的对象可以充当多种角色时,
关联就可能发生。6.在泛化关系中,
可以替代 父类
。也就是说,后者出现的地方,前者都可以出现。但是反过来却不成立。7.最通常的依赖关系是一个类操作的
的定义。8.组成是
的聚集,因为聚集中的每个部分体只能属于
整体。9.实现的符号和继承的符号有相似之处,两者的唯一差别是实现关系用
表示,继承关系用
表示。10.UML背后的两个重量级概念是
。11.状态图和类图、顺序图不同之处在于,后两种图能够对
建立模型,而状态图只是对
建立模型。12.状态图中3个常用的动作是
do动作,也就是对象处于这个状态时应该做什么
。13.顺序图中,消息用
水平箭头线
表示;时间用
表示。14.当逻辑发生分支时,在顺序图中用
生命线发生的分支
表示,在协作图中用
嵌套的序号
表示。15.顺序图强调的是交互的
,协作图强调的是交互的
和参与交互的对象的
上下文环境
。16.GRAPPLE把开发过程分为5个
,之中又由许多
组成。17.GRAPPLE过程中,得到初步类图是在
段,细化类图是在
段。18.每一个设计模式都集中于一个特定的
相互通信的对象或者类
。19.面向对象系统中功能复用的两种最常用技术是
。20.设计模式中应优先使用
。简答题1. 类图在UML中有何重要作用?答: 1.为开发人员提供这种模仿现实世界的表达方式。2.让分析员使用客户所采用的术语和客户交流,促使客户说出所要解决的问题的重要细节。2.阐述用例对于系统开发人员来说的价值。答:是用来从用户的观察角度收集系统需求的一项技术,便于分析员与客户和用户交流,使系统更符合用户的需求3.简述如何在实际工作中发现类。答:在与客户的交谈中,要注意客户用来描述业务实体的名词术语。这些名词可作为领域模型中的类。还要注意你听到的动词,因为这些动词可能会构成这些类中的操作。当得到一组类的核心列表后,应当向客户询问在业务过程中每个类的作用。他们的回答将告诉你这些类的职责。
4.简述怎样发现类之间的继承关系。答:作为候选的类有可能和它的父类、子类在谈话中同时被发现。系统分析员意识到某个类的属性和操作也许能被运用到其他多个类当中去。另一种可能的情况是系统分析员注意到两个或者多个类可能具有相同的属性和操作数5.试使用UML的关系表示法,表示出大学计算机专业中如下这些课程的模型:C语言程序设计、C++语言程序设计、Windows程序设计、网络程序设计。注意抽象类和依赖的使用。6.画出图形用户界面GUI的状态图,要包括屏幕保护状态。其中要表明相应的事件、动作。答:图形用户界面(GUI)是一个可以说明状态转移细节的例子。在这里,假设GUI可以处于以下3种状态之一:
Initializing(初始化)。
Working(工作)。
Shut Down(关闭)。
当打开PC电源的时候,自启动发生。因此Turning the PC on(打开PC)是一个触发器事件,它导致了GUI的状态转移到Initializing状态,而Bootup(自启动)是一个在转移过程中执行的动作。由于Initializing状态中活动的完成,GUI将转移进入Working状态。当你对PC选择ShutDown(关闭机器)时,就引发了Shut Down触发器事件,最后PC自己切断电源,整个过程结束。下面的状态图捕获了GUI的这些状态和转移。下图是GUI加入了Screensaving状态和保护条件的状态图,注意图中的保护条件[is Timeout],被写成一个布尔表达式。7.顺序图和协作图中,消息有哪三种?各自的意义和表示法什么?答: 消息可以是简单的(simple)、同步的(synchronous)或异步的(asynchronous)。简单消息是从—个对象到另一个对象的控制流的转移。如果一个对象发送了—个同步消息,那么它要等待对方对消息的应答,收到应答后才能继续自己的操作。而发送异步消息的对象不需要等待对方的应答便可以继续自己的操作。在顺序图中,简单消息是—个简单箭头,同步消息是实心箭头。异步消息是—个半边箭头,8.画出自动饮料销售机中,理想场景和“钱数不正确”的场景合并在一起的顺序图假设在饮料销售机中有3个对象来做上述工作:前端(Front)(它是饮料销售机与顾客之间的接口),钱币记录仪(Register)(它负责收集顾客投的钱币),以及分配器(Dispenser)。我们还假设钱币记录仪控制分配器对象。那么对象之间的交互序列可能如下所示:
1.顾客向机器前端的槽缝中投入钱币。
2.顾客选择所要购买的饮料品种。
3.钱币被转送给记录仪。
4.由于这是一个理想情况下的场景,假设有饮料存货,则记录仪控制分配器将一罐饮料投递到销售机的前端。由于上述对应的序列图只覆盖了用例“Buy soda”的一个场景(也就是一个实例),因此它被称之为实例顺序图(instance sequence diagram)。下图显示了对应的实例顺序图。注意图中只有简单消息,每个消息都引起控制流程从一个对象转移到另一个对象。对于“钱数不正确”场景:
1.记录仪检查顾客输入的钱币数星是否与所要购买的饮料价格匹配。
2.如果输入数量大于价格,则记录仪计算两者之间的差额并检查机器中存有的金额。
3.如果机器中刚好有能找给顾客的零钱,则记录仪将零钱找给顾客,一切按正常情况继续进行。
4.如果没有零钱找给顾客,则记录仪退回顾客投入的钱币,并显示一个消息,提示顾客重新输入数量正确的金额。5.如果顾客所输入的金额少于所要购买的饮料价格,则记录仪什么也不做,机器等待顾客继续投入钱币。答:
为了表示顺序图中的每个“if”分支,可以将“if”选择条件写在方括号中,放到对应的消息箭头上,即增加[input=price],[change in reserve]和[change not in reserve]3个选择条件。
每个条件都引起消息中的控制流的一个“分支”,将消息分为多条路径。不同的消息路径最终可以到达同—个对象。为了表达这种关系,接收对象的生命线可分为多余路径。在消息序列的某一点上,信息的分支可以合并,生命线的路径也是如此。下图是加入了场景“钱数不正确”后的图。9.画出自动饮料销售机中,理想场景和“钱数不正确”的场景合并在一起的协作图。下面先来看看用例“Buy Soda(买饮料)”的最理想场景下的交互序列:
1.顾客向机器前端的槽缝中投入钱币。
2.顾客做出一个选择,选择所要购买的饮料品种。
3.钱币被转送给记录仪。
4.由于这是—个理想情况下的场景,所以记录仪控制分配器将一罐饮料投递到销售机的前端。这个场景的协作图如下图所示。下面再看“钱数不正确”场景的协作图。这个协作图中要出现以下几个条件:
1.用户输入的钱数超过了所要购买的饮料价格。
2.饮料销售机中备有可找给顾客的零钱。
3.饮料销售机中没有可找给顾客的零钱。
在协作图中条件的表示方法与在顺序图中一样,都是用方括号将条件表达式括起来,放在消息名的前面。但是要注意的是消息的条件和序号之间的匹配关系。
条件和序号可能会使图变得复杂,因此让我们一步一步地来建立这个场景的协作图,这个图的前提条件是用户输入的钱比所要购买的饮料价格高,并且机器中备有找给顾客的零钱。首先增加机器给顾客找零的消息,并为该消息附加上条件。给顾客找零消息是检查是否有找给顾客的零钱这一消息的直接后续消息。为了表明两条消息之间的这种关系,这两个消息采用同一序号,用序号后面的点再接序号来区分它们。这叫做消息嵌套(nesting)。下图说明了这个顺序图的细节。如果机器中没有零钱可找会怎么样呢?销售机必须显示一条“无零钱”信息提示给顾客,并将顾客投入的钱币退出,提示顾客投入零钱。实际上,这时交易就结束了。
要增加这个条件,就要增加控制流的分支。可以用嵌套序号表示这个控制流的序号。因为它是第2个被嵌套的消息,因此圆点后面的序号是2。最后,由于交易已经结束,该消息上要附加构造型《transaction over》来表明交易结束。此外还有另—个发送饮料的消息。下图是这个场景的顺序图。10.简述接口对于构件的重要意义。答:只能通过构件的接口来使用构件中定义的操作。构件可以让它的接口被其他构件使用,以使其他构件可以使用这个构件中定义的操作。提供服务的构件提供了导出接口,访问服务的构件使用了导入接口。11.简述当代面向对象软件工程的特点和优点。允许各个阶段进行迭代各个阶段没有明显的分界线允许后期得到的信息返回,使得早期的能够被修改重用性高、维护性好、扩展性高12.GRAPPLE过程中,需求收集段的各个动作是什么?分别有什么工作产品?答:1 发现业务过程工作产品是一个或者一组能够捕获业务过程中的步骤和判定点的活动图。2 领域分析工作产品是一个高层的类图和会谈记录。3 识别协作系统工作产品是新建的系统的部署图4 发现系统需求会议得到的工作产品是一个包图。5 将结果提交给客户这个动作的工作产品视不同的组织而不同。13.简述类继承和接口继承的区别?我们应该尽量使用哪一种?答:类继承根据一个对象的实现定义了另一个对象的实现。简而言之,它是代码和表示的共享机制。然而,接口继承描述了一个对象什么时候能被用来替代另一个对象。类继承是派生中的类将继承父类的所有属性和方法,并且可以在派生类里添加自己的属性和方法,而接口继承则是在接口里只定义接口的方法,没有属性,并且方法不能实现,只有在派生他的类才实现该方法。类继承是编译的时候新建对象,而接口实例是在运行时刻创建对象。我们应该尽量使用接口继承,类继承会产生类爆炸现象14.只根据抽象类中定义的接口来操纵对象有什么好处?1) 客户无须知道他们使用对象的特定类型,只须对象有客户所期望的接口。2) 客户无须知道他们使用的对象是用什么类来实现的,他们只须知道定义接口的抽象类。15.可复用的面向对象设计的两条原则是什么?1. 针对接口编程,而不是针对实现编程。不要将变量声明为一个特定类的实例对象,而是让他遵从抽象类所定义的接口2.优先使用对象组合,而不是类继承。16.设计模式的两大主题是什么?对象组合,类继承的讨论17.面向对象系统中功能复用的两种最常用技术是什么?面向对象系统中功能复用的两种最常用技术是类继承和对象组合(object composition)。18.Lexi系统的格式化问题中,我们引入了Compositor和Composition两个类来实现“策略”模式。请画出这两个类各自的继承关系和它们之间的协作关系。Compositor和CompositionCompositor类。它的接口(见下表)可让Compositor获知何时去格式化哪些图元。它所格式化的图元是一个被称为Composition的特定图元的各个子图元。一个Composition在创建时得到一个Compositor子类实例,并在必要的时候(如用户改变文档的时候)让Compositor对它的图元作Compose操作。下图描述了Composition类和Compositor类之间的关系。19.Lexi系统的支持多种窗口平台的问题中,我们使用了Window和WindowsImp类来实现桥接模式。请画出这两个类各自的继承关系和它们之间的协作关系。
浏览: 221399 次
来自: 上海
问一下,如果1替换成 M2替换成 N3替换成 O那其实不要这样 ...
lomboz 目录我也没有看到
我安装好tomact插件但是没有看到web那个目录!在网上查了 ...
亲爱的楼主 为什么 java -cp &D:\TDd ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 适配器模式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信