装饰模式

来源:互联网 发布:身份证复制软件3.7 编辑:程序博客网 时间:2024/05/21 08:02

装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为,在现实生活中,这种情况也到处存在,例如一张照片,

我们可以不改变照片本身,给它增加一个相框,使得它具有防潮的功能,而且用户可以根据需要给它增加不同类型的相框,甚至可以在一个小相框的外面再套一个大相框。
      装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系

。在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有类的功能。
      装饰模式定义如下:
装饰模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。

#include <iostream>#include <string>using namespace std;class Person{public:    Person(string s=string("")){        m_name=s;    }    virtual void display(){        cout<<m_name<<endl;    }private:    string m_name;};//装饰类class Finery:public Person{public:    Finery(Person *p=NULL){        m_p=p;    }    void decorate(Person*component){        m_p=component;    }    void display(){        if(m_p!=NULL)            m_p->display();    }    Person*m_p;};class Tshirt:public Finery{public:    void display(){        cout<<"Tshirt"<<endl;        if(m_p!=NULL)            m_p->display();    }};class Trousers:public Finery{public:    void display(){        cout<<"Trousers"<<endl;        if(m_p!=NULL)            m_p->display();    }};int main(){    Person *p=new Person("xiaoli");    Tshirt *t=new Tshirt;    Trousers *tr=new Trousers;    t->decorate(p);    tr->decorate(t);    tr->display();    return 0;}





原创粉丝点击