工学

判断题用装饰者实例化组件时,将增加代码的复杂度,一旦应用了装饰者模式,不只需要实例化组件,还要把组件包装进装饰者,而这样的装饰者有多少个是不确定的A 对B 错

题目
判断题
用装饰者实例化组件时,将增加代码的复杂度,一旦应用了装饰者模式,不只需要实例化组件,还要把组件包装进装饰者,而这样的装饰者有多少个是不确定的
A

B

参考答案和解析
正确答案:
解析: 暂无解析
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

JavaBean 组件模型特点不包括(5)。

A.JavaBean 组件模型是面向应用的组件模型

B.它支持可移植和可重用的Java组件的开发

C.JavaBean 组件可以工作于任何Java程序应用开发工具中

D.JavaBean 组件总是在程序运行时被实例化


正确答案:A
解析:JavaBean组件模型特点有:可以工作于任何Java程序应用开发工具中,总是在程序运行时被实例化,它支持可移植和可重用的Java组件的开发,JavaBean组件模型是面向客户端的组件模型

第2题:

创建型设计模式抽象了实例化过程,有助于系统开发者将对象的创建、组合和表示方式进行抽象。以下( )模式是创建型模式。

A.组合(Composite) B.装饰器(Decorator)C.代理(Proxy) D.单例(Singleton)


正确答案:D

第3题:

从事住宅装饰装修的经营者,应保证装饰装修的质量,不得偷工减料。提供的装饰装修材料必须符合国家规定的环保要求。因经营者的原因需要返工、重作的,经营者应当___返工、重作,并赔偿消费者相关损失。

A、协商

B、适当收取费用

C、免费

D、收取费用


参考答案:C

第4题:

童车的特点是()

  • A、高档化.装饰化
  • B、高档化.装饰化.多功能.化仿真化
  • C、装饰化.多功能
  • D、装饰化.多功能.化仿真化

正确答案:A

第5题:

图形用户界面(GUI)组件定义不同平台的并行类层次结构,适合采用(1)模式。



A.享元(Flyweight)
B.抽象工厂(Abstract Factory)
C.外观(Facade)
D.装饰器(Decorator)

答案:C
解析:
外观模式为子系统中的一组接口提供一个一致的界面,外观模式通过提供一个高层接口,隔离了外部系统与子系统间复杂的交互过程,使得复杂系统的子系统更易使用

第6题:

下图所示为(46)设计模式,

A.组件(Component)

B.适配器(Adapter)

C.组合(Composite)

D.装饰器(Decorator)


正确答案:C
题中的图,即为组合模式的标准UML图,所以应对软件设计师考试,要求掌握常见设计模式的UML图示。组合模式将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

第7题:

下面关于组件的说法正确的一项是______。

A.使用组件提供的对象,必须创建对象的实例,并为这个新的实例分配变量名

B.使用组件提供的对象,可以不用创建对象的实例

C.使用组件提供的对象,必须创建对象的实例,但无须为这个新的实例分配变量名

D.组件不能提供任何对象


正确答案:A

第8题:

阅读以下说明和C++程序代码,将程序填充完整。

【说明】

有时我们希望给某个对象而不是整个类添加一些功能。例如,一个图形用户界面工具箱允许你对任意一个用户界面组件添加一些特性,例如边框,或是一些行为,例如窗口滚动。使用继承机制是添加功能的一种有效途径,从其他类继承过来的边框特性可以被多个子类的实例所使用。但这种方法不够灵活,因为边框的选择是静态的,用户不能控制对组件加边框的方式和时机。

一种较为灵活的方式是将组件嵌入另一个对象中,由这个对象添加边框。我们称这个嵌入的对象为装饰。这个装饰与它所装饰的组件接口一致,因此它对使用该组件的客户透明。它将客户请求转发给该组件,并且可能在转发前后执行一些额外的动作(例如画二个边框)。透明性使得你可以递归地嵌套多个装饰,从而可以添加任意多的功能。

装饰对象结构模式的意图就是动态地给一个对象添加一些额外的职责。就增加功能来说,该模式相比生成子类更为灵活。其示意类图如图13-22所示。

程序代码13-5是该模式的一个示例,说明了如何实现用户接口装饰,函数的实现全部省略。程序中定义了VisualComponent的一个子类Decorator,我们将生成Decorator的子类以获取不同的装饰。VisualComponent类是一个描述可视对象的抽象类,它描述了绘制和事件处理的接口。Decorator的子类定义了特殊的装饰功能,BorderDecorator子类给可视组件添加一个边框,ScrollDecorator给可视组件添加滚动功能。

【程序代码13-5】

(1);

class Window

{

public:

roid SetContents (VisualComponent * contents);

};

//VisualComponent类是一个描述可视对象的抽象类

class VisllalComponent

{

public:

VisualComponent(){};

(2) void Draw(){};

Virtual void Resize(){};

};

class Decorator:public VisualComponent

{

public:

Decorator()

{

//…

};

Decorator(VisualComponent * vcom)

{

//…

};

virtual vold Draw();

virtual vold Resize();

private:

/* Decorator装饰由VisualComponent的指针实现,其在Decorator的构造函数中初始化*/

VisualComponent (3) ;

};

vold Decorator::Draw()

{

(4);//缺省实现

}

void Decorator::Resize()

{

component->Resize();//缺省实现

}

//BorderDecorator 子类为它所包含的组件添加一个边框

class BorderDecorator:public Decorator

{

public:

BorderDecorator(VisualComponent * vcom,int borderWidth)

{

//…

};

Virtual Void Draw();

private:

void DrawBorder(int);

private:

int borderWidth;

};

void BorderDecorator::Draw()

{

Decorator::Draw();

DrawBorder(_width);

}

Void BorderDecorator::DrawBorder(int Width)

{

//…

)

Void Window::SetConterlts(VlsualComponent * contents)

{

//…

}

//SerollDecorat 给可视组件添加滚动功能

class ScroliDecoratOr:public Decorator

{

public:

ScrollDecorator(VlsualComponent * vcom)

{

//…

};

//…

);

class TextView:public VisualComponent

{

//…

};

void main(void)

{

//创建一个正文视图以及放入这个正文视图的窗口

Window * window=new Window;

TcxtView * textView=new TextView;

//TextView是一个VisualComponent,它可以放入窗口中

window->SetContents(textView);

//得到一个有边界的和可以滚动的TextView,边界宽为1

window->SetContents((5));

}


正确答案:(1)class VisualComponent (2)virtual (3)* component (4)component->Draw() (5)new BorderDecorator(new ScrollDecorator(textView)1)
(1)class VisualComponent (2)virtual (3)* component (4)component->Draw() (5)new BorderDecorator(new ScrollDecorator(textView),1) 解析:装饰者模式适合以下情况:
(1)在不影响其它对象的情况下,以动态、透明的方式给单个对象添加职责。
(2)处理那些可以撤消的职责。
(3)当不能采用生成子类的方法进行扩充时,有两种情况:一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长;另一种情况可能是,因为类定义被隐藏,或类定义不能用于生成子类。
题目给出的程序代码以如何获得一个带边框和滚动条的正文视图窗口为例说明了该模式,其中的具体实现全部省略。题中给出的示意类图是该模式通用的结构示意。程序代码涉及的类结构如图13-53所示。

其中,ScrollDecorator、BorderDecorator分别相当于题目中通用结构图中的ConcreteDecoratorA、 ConcreteDecoratorB,它们的职责就是向组件添加相应的功能。
程序代码中,Decorator装饰由VisualComponent的指针component实现,对于Visual Component接口中定义的每一个操作,Decorator类都定义了一个缺省的实现,这一实现将相关请求转发给component,因此第(3)、(4)空分别填:* component、component-> Draw()。
类VisualComponent在Window之后定义,而在Window类中使用了VisualComponent类,所以先要声明该类,因此,第(1)空填:class VisualComponent。VisualComponent类是个抽象类,它是一个界面,它的方法应声明为虚函数,具体实现交由其子类实现,因此,第(2)空填:virtual。
第(5)空有点难度,根据注释“TextView是一个VisualComponent,它可以放入窗口中”可知,Window的方法SetContents参数是一个VisualComponent对象,现需要获得一个有边界的和可以滚动的TextView,边界宽为1,因此要创建一个新的ScrollDecorator对象,将textView放入其中,然后以其为第一个参数构造一个BorderDecorator对象,然后把这个BorderDecorator对象放入到窗口中去即可,因此,该空应填:new BorderDecorator (new ScrollDecorator(textView),1)。

第9题:

楼地面装饰包括楼面装饰和地面装饰两部分,两者主要区别是结构层不同。


答案:错
解析:
楼地面装饰包括楼面装饰和地面装饰两部分,两者主要区别是其饰面承托层不同。

第10题:

关于组件与实例的关系正确的是()。

  • A、同一个组件只能有一个实例应用到工作区中
  • B、设置于实例的属性会影响组件本身
  • C、一个组件可以有多个实例应用到工作区中
  • D、组件的修改不影响到每一个属性

正确答案:C

更多相关问题