Decorator(装饰)模式的解决方案是什么?如何实现?

题目

Decorator(装饰)模式的解决方案是什么?如何实现?


相似考题

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

更多“Decorator(装饰)模式的解决方案是什么?如何实现?”相关问题
  • 第1题:

    行为型设计模式描述类或对象如何交互和如何分配职责。以下( )模式是行为型设计模式。

    A.装饰器 (Decorator)
    B. 构建器 (Builder)
    C.组合(Composite)
    D. 解释器(Interpreter)

    答案:D
    解析:
    AC为结构型,B为创建型。在面向对象系统设计中,每一个设计模式都集中于一个特定的面向对象设计问题或设计要点,描述了什么时候使用它,在另一些设计约束条件下是否还能使用,以及使用的效果和如何取舍。按照设计模式的目的可以分为创建型模式、结构型模式和行为型模式3大类。创建型模式与对象的创建有关:结构型模式处理类或对象的组合,涉及如何组合类和对象以获得更大的结构:行为型模式对类或对象怎样交互和怎样分配职责进行描述。创建型模式包括Factory Method、Abstract Factory、Builder、Prototype和Singleton;结构型模式包括Adapter(类)、Adapter(对象)、Bridge、Composite、Decorator、Fa?ade、Flyweight和Proxy;行为型模式包括Interpreter、Template Method、Chain of Responsibility、Command、Iterator、Mediator、Memento Observer State Strategy和Visitor

  • 第2题:

    下图是(请作答此空)设计模式的类图,该设计模式的目的是( ),图中,Decorator和Component之间是( )关系,ConcreteDecorator和Decorator之间是( )关系。

    A.适配器
    B.桥接
    C.装饰
    D.代理

    答案:C
    解析:
    图中Component定义一个对象接口,可以给这些对象动态地添加职责ConcreteComponent定义一个对象,可以给这个对象添加一些职责Decorator维持一个指向Compnonent对象的指针 ,并定义一个与Component接口-致的接口ConcreateDecorator向组件添加职责装饰( Decorator )模式适应于:在不影响其它对象的情况下,以动态、透明的方式给单个对象添加职责;处理那些可以撤销的职责;当不能采用生成子类的方式进行扩充时Decorator和Component之间应为关联与实现关系ConcreteDecorator和Decorator之间是继承(泛化)关系

  • 第3题:

    欲动态地给一个对象添加职责,宜采用()模式。

    • A、适配器(Adapter)
    • B、桥接(BridgE.
    • C、组合(CompositE.
    • D、装饰器(Decorator)

    正确答案:D

  • 第4题:

    Strategy(策略)模式对问题的解决方案是什么?以及如何实现?


    正确答案: 解决方案是:将算法的选择和算法的实现相分离。让客户可以基于场景做出选择。
    实现:让使用算法的类包含一个抽象类,抽象类中有一个抽象方法指定如何调用算法。每个派生类根据需要实现算法。

  • 第5题:

    Decorator(装饰)模式的效果是什么?


    正确答案: 被添加的功能属于小的对象。好处是可以在Concrete Component对象的功能之前或之后动态添加功能。虽然一个装饰者可以在被装饰者之前或之后添加功能,但对象链总是以Concrete Component对象结束。

  • 第6题:

    Decorator(装饰)模式的意图是为一个对象连接附加的职责。


    正确答案:错误

  • 第7题:

    下面不属于结构模式的有() 。

    • A、适配器模式(Adapter)
    • B、单例模式 (Singleton)
    • C、桥接模式(Bridge)
    • D、装饰模式(Decorator)

    正确答案:B

  • 第8题:

    问答题
    Decorator(装饰)模式的解决方案是什么?如何实现?

    正确答案: 解决方案是允许扩展一个对象的功能,而不必借助于子类型化。
    实现:创建一个抽象类来表示原始的类和要添加到这个类上的新功能。在装饰者类中,将“对新功能的调用”放在“对紧随其后对象的调用”之前或之后,以获得正确的顺序。
    解析: 暂无解析

  • 第9题:

    单选题
    以下哪种设计模式能够支持动态地给一个对象增加其他职责而且在职责整合时支持热插拔()
    A

    桥接模式(Bridge)

    B

    装饰模式(Decorator)

    C

    享元模式(Flyweight)

    D

    外观模式(Facade)


    正确答案: C
    解析: 暂无解析

  • 第10题:

    问答题
    Decorator(装饰)模式的效果是什么?

    正确答案: 被添加的功能属于小的对象。好处是可以在Concrete Component对象的功能之前或之后动态添加功能。虽然一个装饰者可以在被装饰者之前或之后添加功能,但对象链总是以Concrete Component对象结束。
    解析: 暂无解析

  • 第11题:

    判断题
    Decorator(装饰)模式的意图是为一个对象连接附加的职责。
    A

    B


    正确答案:
    解析: 暂无解析

  • 第12题:

    单选题
    结构型模式中最体现扩展性的几种模式是()
    A

    适配器(Adapte)模式

    B

    合成(Composite)模式

    C

    装饰(Decorator)模式

    D

    桥接(Bridge)模式


    正确答案: C
    解析: 暂无解析

  • 第13题:

    行为型设计模式描述类或对象如何交互和如何分配职责。( )模式是行为型设计模式

    A.装饰器(Decorator)
    B.构建器(Builder)
    C.组合(Composite)
    D.解释器(Interpreter)

    答案:D
    解析:
    本题考查设计模式的基础知识。设计模式:是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。设计模式分为三种类型,共23种。1、创建型模式:单例模式、抽象工厂模式、建造者(构建)模式、工厂模式、原型模式。2、结构型模式:适配器模式、桥接模式、装饰(器)模式、组合模式、外观模式、享元模式、代理模式。3、行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)、访问者模式。AC为结构型设计模式,B为创建型设计模式。故正确答案为:D

  • 第14题:

    下图是( )设计模式的类图,该设计模式的目的是( ),图中,Decorator和Component之间是(请作答此空)关系,ConcreteDecorator和Decorator之间是( )关系。

    A.依赖和关联
    B.依赖和继承
    C.关联和实现
    D.继承和实现

    答案:C
    解析:
    图中Component定义一个对象接口,可以给这些对象动态地添加职责ConcreteComponent定义一个对象,可以给这个对象添加一些职责Decorator维持一个指向Compnonent对象的指针 ,并定义一个与Component接口-致的接口ConcreateDecorator向组件添加职责装饰( Decorator )模式适应于:在不影响其它对象的情况下,以动态、透明的方式给单个对象添加职责;处理那些可以撤销的职责;当不能采用生成子类的方式进行扩充时Decorator和Component之间应为关联与实现关系ConcreteDecorator和Decorator之间是继承(泛化)关系

  • 第15题:

    结构型模式中最体现扩展性的几种模式是()

    • A、适配器(Adapte)模式
    • B、合成(Composite)模式
    • C、装饰(Decorator)模式
    • D、桥接(Bridge)模式

    正确答案:C

  • 第16题:

    以下哪些设计模式都可以用来将抽象部分与实现部分分离()

    • A、适配器模式(Adapter)
    • B、装饰模式(Decorator)
    • C、桥接模式(Bridge)
    • D、代理模式(Proxy)

    正确答案:C

  • 第17题:

    以下哪种设计模式能够支持动态地给一个对象增加其他职责而且在职责整合时支持热插拔()

    • A、桥接模式(Bridge)
    • B、装饰模式(Decorator)
    • C、享元模式(Flyweight)
    • D、外观模式(Facade)

    正确答案:B

  • 第18题:

    ()模式通过提供与对象相同的接口来控制对这个对象的访问。

    • A、适配器(Adapter)
    • B、代理(Proxy)
    • C、组合(Composite)
    • D、装饰器(Decorator)

    正确答案:B

  • 第19题:

    单选题
    下面不属于结构模式的有() 。
    A

    适配器模式(Adapter)

    B

    单例模式 (Singleton)

    C

    桥接模式(Bridge)

    D

    装饰模式(Decorator)


    正确答案: B
    解析: 暂无解析

  • 第20题:

    问答题
    Strategy(策略)模式对问题的解决方案是什么?以及如何实现?

    正确答案: 解决方案是:将算法的选择和算法的实现相分离。让客户可以基于场景做出选择。
    实现:让使用算法的类包含一个抽象类,抽象类中有一个抽象方法指定如何调用算法。每个派生类根据需要实现算法。
    解析: 暂无解析

  • 第21题:

    单选题
    以下哪些设计模式都可以用来将抽象部分与实现部分分离()
    A

    适配器模式(Adapter)

    B

    装饰模式(Decorator)

    C

    桥接模式(Bridge)

    D

    代理模式(Proxy)


    正确答案: D
    解析: 暂无解析

  • 第22题:

    单选题
    下面属于结构模式的有()。
    A

    策略模式(Strategies)

    B

    单例模式(Singleton)

    C

    抽象工厂模式(Abstract Factory)

    D

    装饰模式(Decorator)


    正确答案: C
    解析: 暂无解析

  • 第23题:

    判断题
    Decorator(装饰)模式适用性是表示对象的部分-整体层次结构
    A

    B


    正确答案:
    解析: 暂无解析