网友您好, 请在下方输入框内输入要搜索的题目:

题目内容 (请给出正确答案)

阅读以下说明和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));

}


参考答案

更多 “ 阅读以下说明和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,边界宽为1window->SetContents((5));} ” 相关考题
考题 Swing允许你选择程序的图形界面风格,例如java风格,windows风格,cde/motif风格等等。 A.错误B.正确

考题 在Java图形用户界面编程中,若显示一些不需要修改的文本信息,一般使用的组件是( )。 A、JButtonB、JTextAreaC、JTextFieldD、JLabel

考题 在java图形用户界面编程中,若显示一些不需要修改的文本信息,一般是使用( )类的对象来实现。A.labelB.buttonC.textareaD.testfield

考题 C#中组件可以分为两类:即()和()。A、不具备图形界面的类库,具有用户界面的类库B、不具备图形界面的控件,具有用户界面的控件C、不具备图形界面的类库,具有用户界面的控件D、不具备图形界面的控件,具有用户界面的类库

考题 ( )设计模式能够动态地给一个对象添加一些额外的职责而无须修改此对象的结构;( )设计模式定义一个用于创建对象的接口,让子类决定实例化哪一个类;欲使一个后端数据模型能够被多个前端用户界面连接,采用(请作答此空)模式最适合。A. 装饰器 B. 享元 C. 观察者 D. 中介者

考题 ( )设计模式能够动态地给一个对象添加一些额外的职责而无须修改此对象的结构;(请作答此空)设计模式定义一个用于创建对象的接口,让子类决定实例化哪一个类;欲使一个后端数据模型能够被多个前端用户界面连接,采用()模式最适合。A. 工厂方法 B. 享元 C. 观察者 D. 中介者

考题 (请作答此空)设计模式能够动态地给一个对象添加一些额外的职责而无须修改此对象的结构;()设计模式定义一个用于创建对象的接口,让子类决定实例化哪一个类;欲使一个后端数据模型能够被多个前端用户界面连接,采用()模式最适合。A. 组合 B. 外观 C. 享元 D. 装饰器

考题 6、以下对框架的描述不正确的是()。A.框架是Swing的顶级容器组件B.框架是一个图形界面程序的主窗口C.框架一般包括标题栏、最小化最大化关闭按钮以及边框等D.一个图形界面程序只能有一个框架

考题 标签控件主要用于在应用程序界面上显示用户所关心的数据、给用户显示一些提示信息等