niusouti.com

外观模式,当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些额外的功能。

题目

外观模式,当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些额外的功能。


相似考题
更多“外观模式,当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些额外的功能。”相关问题
  • 第1题:

    ● 已知某子系统为外界提供功能服务,但该子系统中存在很多粒度十分小的类,不便被外界系统直接使用,采用(41)设计模式可以定义一个高层接口,这个接口使得这一子系统更加容易使用;当不能采用生成子类的方法进行扩充时,可采用(42)设计模式动态地给一个对象添加一些额外的职责。

    (41)

    A. Facade(外观)

    B. Singleton(单件)

    C. Participant(参与者)

    D. Decorator(装饰)

    (42)

    A. Facade(外观)

    B. Singleton(单件)

    C. Participant(参与者)

    D. Decorator(装饰)


    正确答案:A,D


  • 第2题:

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

    (43)

    A.适配器(Adapter)

    B.桥接(Bridge)

    C.组合( Composite)

    D.装饰器(Decorator)


    正确答案:D

  • 第3题:

    Decorator模式的结构图如图13-4所示。关于其说法不正确的是(50)。

    A.动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。

    B.在不影响其它对象的情况下,以动态、透明的方式给单个对象添加职责。

    C.Decorator模式的两个主要优点是:比静态继承更灵活,避免在层次结构高层的类有太多的特征。

    D.Decorator模式是一种行为模式。


    正确答案:D
    解析:Decorator模式是一种对象结构模式,用于描述对象之间的结构关系,从题中的结构图可看出,它并不描述对象的行为。Decorator模式的意图是动态地给一个对象添加一些额外的职责。就增加功能来说,该模式相比生成子类更为灵活。它适用于以下情况:①在不影响其它对象的情况下,以动态、透明的方式给单个对象添加职责。②处理那些可以撤消的职责。③当不能采用生成子类的方法进行扩充时,有两种情况:一种情况可能是有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长;另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。

  • 第4题:

    ● 当不适合采用生成子类的方法对已有的类进行扩充时,可以采用 (43) 设计模式动态地给一个对象添加一些额外的职责;当应用程序由于使用大量的对象,造成很大的存储开销时,可以采用 (44) 设计模式运用共享技术来有效地支持大量细粒度的对象;当想使用一个已经存在的类,但其接口不符合需求时,可以采用 (45) 设计模式将该类的接口转换成我们希望的接口。

    (43)

    A. 命令(Command)

    B. 适配器(Adapter)

    C. 装饰(Decorate)

    D. 享元(Flyweight)

    (44)

    A. 命令(Command)

    B. 适配器(Adapter)

    C. 装饰(Decorate)

    D. 享元(Flyweight)

    (45)

    A. 命令(Command)

    B. 适配器(Adapter)

    C. 装饰(Decorate)

    D. 享元(Flyweight)


    正确答案:C,D,B


  • 第5题:

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

    A.将一个请求封装成一个对象,从而使得可以用不同的请求对客户进行参数化,队请求排队或记录请求日志,以及支持可撤销的操作
    B.将一个类的接口适配成用户所期待的
    C.动态地给一个对象附加额外的职责,不必通过子类就能灵活地增加功能
    D.为一个对象提供代理以控制该对象的访问

    答案:A
    解析:
    适配器模式:将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。命令模式:将一个请求封装成一个对象,从而使得可以用不同的请求对客户进行参数化,队请求排队或记录请求日志,以及支持可撤销的操作。装饰模式:指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。代理模式:为一个对象提供代理以控制该对象的访问。类之间的关系主要有以下几种:(1)继承关系:是指子类自动地具有其父类的全部属性与操作,也称为父类对子类的泛化。在UML建模语言中,采用空心三角形表示,从子类指向父类。(2)关联关系:是指两个或多个类之间的一种静态关系,表现为一个类是另一个类的成员变量。在UML类图中,双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头,带普通箭头的实心线指向被拥有者。(3)聚合关系:是整体与部分之间的关系,是强的关联关系。在UML中,聚合关系用带空心菱形的实心线,菱形指向整体。(4)依赖关系:也是类之间的一种静态关系,表现为一个类是另外一个类的局部变量。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。

  • 第6题:

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

    A. 装饰器
    B. 享元
    C. 观察者
    D. 中介者

    答案:D
    解析:
    组合(Composite)模式将对象组合成树形结构以表示“部分一整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。适用于:想表示对象的部分—整体层次结构;希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。外观(Facade)模式为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。适用于:要为一个复杂子系统提供一个简单接口时,子系统往往因为不断演化而变得越来越复杂;客户程序与抽象类的实现部分之间存在着很大的依赖性;当需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。享元(Flyweight)模式运用共享技术有效地支持大量细粒度的对象。适用于:一个应用程序使用了大量的对象;完全由于使用大量的对象,造成很大的存储开销;对象的大多数状态都可变为外部状态;如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象;应用程序不依赖于对象标识。装饰器(Decorator)模式描述了以透明围栏来支持修饰的类和对象的关系,动态地给一个对象添加一些额外的职责,从增加功能的角度来看,装饰器模式相比生成子类更加灵活。适用于:在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;处理那些可以撤销的职责;当不能采用生成子类的方式进行扩充时。工厂方法(Factory Method)定义一个用于创建对象的接口,让子类决定将哪一个类实例化,使一个类的实例化延迟到其子类。适用于:当一个类不知道它所必须创建的对象的类的时候;当一个类希望由它的子类来指定它所创建的对象的时候;当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个帮助子类是代理者这一信息局部化的时候。观察者(Observer)模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。适用于:当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立的对象中以使它们可以各自独立地改变和复用;当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变时;当一个对象必须通知其他对象,而它又不能假定其他对象是谁,即不希望这些对象是紧耦合的。中介者(Mediator)用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。适用于:一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解;一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象;想定制一个分布在多个类中的行为,而又不想生成太多的子类。如使一个后端数据模型能够被多个前端用户界面连接,采用此模式最合适。

  • 第7题:

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

    A. 组合
    B. 外观
    C. 享元
    D. 装饰器

    答案:D
    解析:
    组合(Composite)模式将对象组合成树形结构以表示“部分一整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。适用于:想表示对象的部分—整体层次结构;希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。外观(Facade)模式为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。适用于:要为一个复杂子系统提供一个简单接口时,子系统往往因为不断演化而变得越来越复杂;客户程序与抽象类的实现部分之间存在着很大的依赖性;当需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。享元(Flyweight)模式运用共享技术有效地支持大量细粒度的对象。适用于:一个应用程序使用了大量的对象;完全由于使用大量的对象,造成很大的存储开销;对象的大多数状态都可变为外部状态;如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象;应用程序不依赖于对象标识。装饰器(Decorator)模式描述了以透明围栏来支持修饰的类和对象的关系,动态地给一个对象添加一些额外的职责,从增加功能的角度来看,装饰器模式相比生成子类更加灵活。适用于:在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;处理那些可以撤销的职责;当不能采用生成子类的方式进行扩充时。工厂方法(Factory Method)定义一个用于创建对象的接口,让子类决定将哪一个类实例化,使一个类的实例化延迟到其子类。适用于:当一个类不知道它所必须创建的对象的类的时候;当一个类希望由它的子类来指定它所创建的对象的时候;当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个帮助子类是代理者这一信息局部化的时候。观察者(Observer)模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。适用于:当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立的对象中以使它们可以各自独立地改变和复用;当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变时;当一个对象必须通知其他对象,而它又不能假定其他对象是谁,即不希望这些对象是紧耦合的。中介者(Mediator)用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。适用于:一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解;一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象;想定制一个分布在多个类中的行为,而又不想生成太多的子类。如使一个后端数据模型能够被多个前端用户界面连接,采用此模式最合适。

  • 第8题:

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

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

    正确答案:B

  • 第9题:

    上转型对象具有如下()特点。

    • A、上转型对象不能操作子类新增的成员变量(相当于失掉了这部分属性)、不能使用子类新增的方法(相当于失掉了一些功能)
    • B、转型对象可以操作子类继承或覆盖的成员变量,也可以使用子类继承的或覆盖的方法
    • C、如果子类覆盖了父类的某个方法后,当对象的上转型对象调用这个方法时一定是调用了这个覆盖的方法,因为程序在运行时知道,这个上转型对象的实体是子类创建的,只不过损失了一些属性和功能而已
    • D、可以将父类创建的对象的引用赋值给子类声明的对象

    正确答案:A,B,C

  • 第10题:

    判断题
    外观模式,当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些额外的功能。
    A

    B


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

  • 第11题:

    单选题
    关于模式适用性,在以下情况不适合使用DECORATOR(装饰)模式?()
    A

    在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责

    B

    处理那些可以撤消的职责

    C

    客户程序与抽象类的实现部分之间存在着很大的依赖性

    D

    当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类


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

  • 第12题:

    填空题
    ()模式可以动态地给一个对象增加一些额外的职责。

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

  • 第13题:

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

  • 第14题:

    ● 欲动态地给一个对象添加职责,宜采用(46)模式。 A.适配器(Adapter) B.桥接(Bridge)C.组合( Composite) D.装饰器(Decorator)


    正确答案:D
    试题46分析适配器模式将一个接口转换成为客户想要的另一个接口,适配器模式使接口不兼容的那些类可以一起工作。桥接模式将抽象部分与实现部分分离,使得它们两部分可以独立地变化。合成模式组合多个对象形成树型结构以表示整体—部分的结构层次。装饰器模式动态地给一个对象增加其他职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。参考答案(46)D

  • 第15题:

    已知某子系统为外界提供功能服务,但该子系统中存在很多粒度十分小的类,不便被外界系统直接使用,采用(41)设计模式可以定义一个高层接口,这个接口使得这一子系统更加容易使用;当不能采用生成子类的方法进行扩充时,可采用(42)设计模式动态地给一个对象添加一些额外的职责。

    A.Facade(外观)

    B.Singleton(单件)

    C.Participant(参与者)

    D.Decorator(装饰)


    正确答案:A

  • 第16题:

    ● 下面给出了四种设计模式的作用:

    外观(Facade):为子系统中的一组功能调用提供一个一致的接口,这个接口使得这一子系统更加容易使用

    装饰(Decorate):当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些额外的功能;

    单件(Singleton) :保证一个类仅有一个实例,并提供一个访问它的全局访问点;

    模板方法(Template Method):在方法中定义算法的框架,而将算法中的一些操作步骤延迟到子类中现。请根据下面叙述的场景选用适当的设计模式。若某面向对象系统中的某些类有且只有一个实例,那么采用(42)设计模式能够有效达到该目的;该系统中的某子模块需要为其它模块提供访问不同数据库系统(Oracle、SQL Server、DB2 UDB 等)的功能,这些数据库系统提供的访问接口有一定的差异,但访问过程却都是相同的,例如,先连接数据库,再打开数据库,最后对数据进行查询,(43) 设计模式可抽象出相同的数据库访问过程;系统中的文本显示类(TextView)和图片显示类(PictureView)都继承了组件类

    (Component),分别显示文本和图片内容,现需要构造带有滚动条、或者带有黑色边框、或者既有滚动条又有黑色边框的文本显示控件和图片显示控件,但希望最多只增加三个类,(44)设计模式可以实现该目的。

    (42)A. 外观 B. 装饰 C. 单件 D. 模板方法

    (43)A. 外观 B. 装饰 C. 单件 D. 模板方法

    (44)A. 外观 B. 装饰 C. 单件 D. 模板方法


    正确答案:C,D,B

  • 第17题:

    ( )设计模式能够动态地给一个对象添加一些额外的职责而无需修改此对象的结构

    A.组合(Composite)
    B.外观(Facade)
    C.享元(Flyweight)
    D.装饰器(Decorator)

    答案:D
    解析:
    抽象工厂模式(Abstract Factory):提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类
    构建器模式(Builder):将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示
    工厂方法模式(Factory Method):定义一个创建对象的接口,但由子类决定需要实例化哪一个类工厂方法使得子类实例化的过程推迟
    原型模式(Prototype):用原型实例指定创建对象的类型,并且通过拷贝这个原型来创建新的对象
    单例模式(Singleton):保证一个类只有一个实例,并提供一个访问它的全局访问点
    适配器模式(Adapter):将一个类的接口转换成用户希望得到的另一种接口它使原本不相容的接口得以协同工作
    桥接模式(Bridge):将类的抽象部分和它的实现部分分离开来,使它们可以独立地变化
    组合模式(Composite):将对象组合成树型结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性
    装饰模式(Decorator):动态地给一个对象添加一些额外的职责它提供了用子类扩展功能的一个灵活的替代,比派生一个子类更加灵活
    外观模式(Facade):定义一个高层接口,为子系统中的一组接口提供一个一致的外观,从而简化了该子系统的使用
    享元模式(Flyweight):提供支持大量细粒度对象共享的有效方法
    代理模式(Proxy):为其他对象提供一种代理以控制这个对象的访问
    职责链模式(Chain of)

  • 第18题:

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

    A. 工厂方法
    B. 享元
    C. 观察者
    D. 中介者

    答案:A
    解析:
    组合(Composite)模式将对象组合成树形结构以表示“部分一整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。适用于:想表示对象的部分—整体层次结构;希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。外观(Facade)模式为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。适用于:要为一个复杂子系统提供一个简单接口时,子系统往往因为不断演化而变得越来越复杂;客户程序与抽象类的实现部分之间存在着很大的依赖性;当需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。享元(Flyweight)模式运用共享技术有效地支持大量细粒度的对象。适用于:一个应用程序使用了大量的对象;完全由于使用大量的对象,造成很大的存储开销;对象的大多数状态都可变为外部状态;如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象;应用程序不依赖于对象标识。装饰器(Decorator)模式描述了以透明围栏来支持修饰的类和对象的关系,动态地给一个对象添加一些额外的职责,从增加功能的角度来看,装饰器模式相比生成子类更加灵活。适用于:在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;处理那些可以撤销的职责;当不能采用生成子类的方式进行扩充时。工厂方法(Factory Method)定义一个用于创建对象的接口,让子类决定将哪一个类实例化,使一个类的实例化延迟到其子类。适用于:当一个类不知道它所必须创建的对象的类的时候;当一个类希望由它的子类来指定它所创建的对象的时候;当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个帮助子类是代理者这一信息局部化的时候。观察者(Observer)模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。适用于:当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立的对象中以使它们可以各自独立地改变和复用;当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变时;当一个对象必须通知其他对象,而它又不能假定其他对象是谁,即不希望这些对象是紧耦合的。中介者(Mediator)用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。适用于:一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解;一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象;想定制一个分布在多个类中的行为,而又不想生成太多的子类。如使一个后端数据模型能够被多个前端用户界面连接,采用此模式最合适。

  • 第19题:

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

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

    正确答案:D

  • 第20题:

    关于模式适用性,在以下情况不适合使用DECORATOR(装饰)模式?()

    • A、在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责
    • B、处理那些可以撤消的职责
    • C、客户程序与抽象类的实现部分之间存在着很大的依赖性
    • D、当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类

    正确答案:C

  • 第21题:

    以下不适合使用装饰模式的是()

    • A、装饰某个对象时需要修改该类的对象
    • B、在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责
    • C、需要动态地给一个对象增加功能,这些功能也可以动态地被撤销
    • D、当不能采用继承的方式对系统进行扩充或者采用继承不利于系统扩展和维护时
    • E、只需要对某个对象进行外观修饰而不需要修改其内在属性时

    正确答案:A

  • 第22题:

    单选题
    以下不适合使用装饰模式的是()
    A

    装饰某个对象时需要修改该类的对象

    B

    在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责

    C

    需要动态地给一个对象增加功能,这些功能也可以动态地被撤销

    D

    当不能采用继承的方式对系统进行扩充或者采用继承不利于系统扩展和维护时

    E

    只需要对某个对象进行外观修饰而不需要修改其内在属性时


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

  • 第23题:

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

    桥接模式(Bridge)

    B

    装饰模式(Decorator)

    C

    享元模式(Flyweight)

    D

    外观模式(Facade)


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