首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下说明和C++程序代码,将程序填充完整。 【说明】 有时我们希望给某个对象而不是整个类添加一些功能。例如,一个图形用户界面工具箱允许你对任意一个用户界面组件添加一些特性,例如边框,或是一些行为,例如窗口滚动。使用继承机制是添加功能的一种
阅读以下说明和C++程序代码,将程序填充完整。 【说明】 有时我们希望给某个对象而不是整个类添加一些功能。例如,一个图形用户界面工具箱允许你对任意一个用户界面组件添加一些特性,例如边框,或是一些行为,例如窗口滚动。使用继承机制是添加功能的一种
admin
2010-01-15
46
问题
阅读以下说明和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)在不影响其它对象的情况下,以动态、透明的方式给单个对象添加职责。
(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)。
转载请注明原文地址:https://kaotiyun.com/show/6cDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
采用瀑布模型进行系统开发的过程中,每个阶段都会产生不同的文档。以下关于产生这些文档的描述中,正确的是(25)。
在结构化分析方法中,数据流图描述数据在系统中如何被传送或变换,反映系统必须完成的逻辑功能,用于(38)建模。在绘制数据流图时,(39)。(39)
下面关于程序语言的叙述,错误的是(22)。
以下关于汇编语言的叙述中,错误的是______。A.汇编语言源程序中的指令语句将被翻译成机器代码B.汇编语言的指令语句必须具有操作码字段,可以没有操作数字段C.汇编程序以汇编语言源程序为输入,以机器语言表示的目标程序为输出D.汇编程序先将源程序中的
编写测试计划的目的是______。①测试工作顺利进行②使项目参与人员沟通更舒畅③使测试工作更加系统化④软件过程规范化的要求⑤控制软件质量
POP3协议采用(29)模式进行通信,当客户机需要服务时,客户端软件与POP3服务器建立(30)连接。(30)
在软件维护阶段,将专用报表功能改成通用报表功能,以适应将来可能的报表格式变化,则该维护类型为()维护。
计算机各功能部件之间的合作关系如下图所示。假设图中虚线表示控制流,实线表示数据流,那么a、b和c分别表示(5)。
银行系统数据流图中,某个加工根据客户的多个不同属性的值来执行不同的操作,则对该加工最适宜采用()描述。
随机试题
Moreandmorestudentswanttostudyin"hot"majors.【C1】______aresult,manystudentswantto【C2】______theirinterestsandstu
关于视网膜色素上皮,正确的说法是
适用于绕线转子异步电动机的启动方法为( )。
下列各项属于投标报价编制依据的有()。
建设工程造价是指项目()所需的全部费用。
某企业(增值税一般纳税人)2012年12月份增值税纳税资料如下:“应交税费——应交增值税”账户期初无余额,期末为贷方余额110000元。年终结账后,次年1月25日税务机关对其检查时,发现有如下两笔业务的会计处理如下:(1)12月3日,将自产货物一批用
我国16周岁以上不满18周岁的公民,以自己的劳动收入为主要生活来源的,视为()。
已达到预定可使用状态的同定资产,无论是否交付使用,尚未办理竣工决算的,应当按照估汁价值确认固定资产,并计提折旧;待办理了竣工决算手续后,再按实际成本调整原来的暂估价值,并需要凋整原已汁提的折旧额。()
中国公民孙某2017年度取得下列所得:(1)每月工资3000元,12月份另取得年终绩效工资30000元。(2)5月份孙某出售自己持有的限售股,取得转让收入100000元,无法准确计算全部限售股成本原值。(3)7月份购入A债券20000份,每份买入价5
红皇后效应理论认为,竞争是推动组织成长的重要因素,组织如果想要保持长期良好的成长态势,就必须积极地参与竞争,竞争会促进组织设立率的提高,并促使组织更好地演化和发展。根据上述定义,下列没体现红皇后效应的是()。
最新回复
(
0
)