Decoration mode is better than inheritance in object dynamic increment function, replacing inheritance with decoration mode, more flexible than inheritance.
Dress up the third edition of the Dish
classperson{ Public: Virtual voidShow () {cout<<"Tom:" ; }};classDecorator: Publicperson{ Public: person*m_a;//decorated by voidDecorate (person*a) {M_a=A; } //void Show () {//if (m_a! = nullptr) {//m_a->show (); // } //}};classTshirt: Publicdecorator{ Public: voidShow () {M_a->show ();//To be performed by the decorator firstcout <<"T-shirts"; //decorator::show (); }};classShores: Publicdecorator{ Public: voidShow () {M_a-Show (); cout<<"Shoes"; //decorator::show (); }};intMain () { person*tom=NewPerson (); Tshirt*gucci=Newtshirt (); Shores*vans=NewShores (); Gucci->decorate (Tom);//Gucci's m_a for the person classVans->decorate (Gucci);//Vans's m_a for Tshirt classVans->Show (); return 0;}
Dress Up Second Edition
classperson{ Public: Virtual voidShow () {}};classTom: Publicperson{ Public: voidShow () {cout<<"Tom:"; }};classJerry: Publicperson{ Public: voidShow () {cout<<"Jerry:"; }};classDecorator: Publicperson{ Public: person*M_a; voidDecorate (person*a) {M_a=A; } //void Show () {//if (m_a! = nullptr) {//m_a->show (); // } //}};classTshirt: Publicdecorator{ Public: voidShow () {M_a-Show (); cout<<"T-shirts"; //decorator::show (); }};classShores: Publicdecorator{ Public: voidShow () {M_a-Show (); cout<<"Shoes"; //decorator::show (); }};intMain () {//Person *tom = new Tom (); //tshirt *gucci = new Tshirt (); //Shores *vans = new Shores (); //Gucci->decorate (Tom); //vans->decorate (Gucci); //vans->show (); Person*jerry =NewJerry (); Tshirt*gucci =Newtshirt (); Shores*vans =NewShores (); Gucci-decorate (Jerry); Vans-decorate (Gucci); Vans-Show (); return 0;}
Big talk Design pattern--simple example of decoration mode C + +