반응형
decorator pattern
1.소스
#include <iostream> using namespace std; class I { public: virtual ~I(){} virtual void do_it() = 0; }; class A: public I { public: ~A() { cout << "A dtor" << '\n'; } /*virtual*/ void do_it() { cout << 'A'; } }; class D: public I { public: D(I *inner) { m_wrappee = inner; } ~D() { delete m_wrappee; } /*virtual*/ void do_it() { m_wrappee->do_it(); } private: I *m_wrappee; }; class X: public D { public: X(I *core): D(core){} ~X() { cout << "X dtor" << " "; } /*virtual*/ void do_it() { D::do_it(); cout << 'X'; } }; class Y: public D { public: Y(I *core): D(core){} ~Y() { cout << "Y dtor" << " "; } /*virtual*/ void do_it() { D::do_it(); cout << 'Y'; } }; class Z: public D { public: Z(I *core): D(core){} ~Z() { cout << "Z dtor" << " "; } /*virtual*/ void do_it() { D::do_it(); cout << 'Z'; } }; int maint( int argc , char ** argv ) { I *anX = new X(new A); I *anXY = new Y(new X(new A)); I *anXYZ = new Z(new Y(new X(new A))); anX->do_it(); cout << '\n'; anXY->do_it(); cout << '\n'; anXYZ->do_it(); cout << '\n'; delete anX; delete anXY; delete anXYZ; }
2.결과
g++ -o decorator decorator.cpp hacker@HACKER:~/cpp$ ./decorator AX AXY AXYZ X dtor A dtor Y dtor X dtor A dtor Z dtor Y dtor X dtor A dtor
반응형
'C++ > 0x01-design pattern' 카테고리의 다른 글
Flyweight pattern (0) | 2016.07.18 |
---|---|
facade pattern (0) | 2016.07.14 |
composite pattern (0) | 2016.07.14 |
Observer pattern (0) | 2016.07.14 |
design pattern ][ Abstract Factory pattern (0) | 2016.07.14 |