cplusplus装饰器模式

装饰器模式

#include <iostream>
using namespace std;

//抽象组件类
class Component{
public:
    virtual void move()=0;
};

class ConreteComponentOne: public Component{
public:
    ConreteComponentOne(){
        cout<<"ConreteComponentOne instance"<<endl;
    }

    void move(){
        cout<<"move one"<<endl;
    }

};

class Decorator{
public:
    Decorator(shared_ptr<Component> &pobj){
        this->pobj = pobj;
    }

    void move(){
        cout<<"Decorator ";
        this->pobj->move();
    }
private:
    shared_ptr<Component> pobj;
};

class ConcreteDecoratorOne: public Decorator{
public:
    ConcreteDecoratorOne(shared_ptr<Component> &pobj): Decorator(pobj){
        cout<<"ConcreteDecoratorOne"<<endl;
    }

    void say(){
        cout<<"ConcreteDecoratorOne say"<<endl;
    }
};

int main(void){
    shared_ptr<Component> cpone = make_shared<ConreteComponentOne>();
    cpone->move();
    cout<<"____"<<endl;

    shared_ptr<ConcreteDecoratorOne> cdp = make_shared<ConcreteDecoratorOne>(cpone);
    cdp->move();
    cdp->say();
    cout<<"____"<<endl;

    ConcreteDecoratorOne cdone = ConcreteDecoratorOne(cpone);
    cdone.say();
    cdone.move();
}

 

posted @ 2021-12-03 20:38  海228  阅读(21)  评论(0)    收藏  举报