c++实现装饰器模式

最近项目面临一个问题如:

A* a = new A();

a->start();


想把start修改了,但是有不想修改a = new A()这一句

这时候可以使用装饰器模式,变成如下:

AA* a = new AA();
 BB* b = new BB(a);
 b->startA();

为了更好的修改AA 里面的protected方法和protected变量,

必须BB声明为AA的友元

下面是装饰器的具体实现


class BB;

class AA
{
    friend BB;
public:
    virtual void startA()
    {
        start();
    }

protected:
    virtual void start()
    {
        std::cout << "AA" << endl;
    }
};


class BB : public AA
{
public:
    BB(AA* fri)
    {
        a = fri;
    }

    virtual void startA()
    {
        std::cout << "funck" << std::endl;

        a->start();
    }

protected:
    AA* a;

};




你可能感兴趣的:(设计模式运用)