设计模式(三):装饰模式

  装饰模式,是面向对象编程领域中,一种动态地往一个类中添加新的行为的设计模式。就功能而言,修饰模式相比生成子类更为灵活,这样可以给某个对象而不是整个类添加一些功能。

  大概明白,还没想好怎么说明

  

#include <iostream>


using namespace std;


class Widget
{
public:
    virtual void draw() = 0;
    ~Widget(){}

    /* data */
};

class TextField : public Widget
{
public:
    TextField(int w, int h ): width(w), height(h){}
    ~TextField();

    void draw()
    {
        cout << "TextField: " << width << ", " << height << endl;
    }
    /* data */

private:
    int width;
    int height;
};

class Decorator : public Widget
{
public:
    Decorator( Widget *w )
    {
        wid = w;
    }
    ~Decorator(){
        delete wid;
    }

    void draw()
    {
        wid->draw();
    }

private:
    Widget *wid;
    /* data */
};

class BorderDecorator : public Decorator
{
public:
    BorderDecorator( Widget* w ) : Decorator( w ){

    }

    ~BorderDecorator();

    void draw()
    {
        Decorator::draw();
        cout << "BorderDecorator" << endl;
    }
    /* data */
};

class ScrollDecorator : public Decorator
{
public:
    ScrollDecorator( Widget* w ) : Decorator( w ){}
    ~ScrollDecorator();

    void draw()
    {
        Decorator::draw();
        cout << "ScrollDecorator" << endl;
    }
    /* data */
};

int main()
{
    Widget* aWidget = new BorderDecorator( new BorderDecorator( new ScrollDecorator( new TextField
        ( 80, 24 ) ) ) );
    aWidget->draw();
    delete aWidget;

    return 0;
}

 

posted @ 2013-03-29 21:15  brackenbo  阅读(169)  评论(0编辑  收藏  举报