반응형
adapter pattern
1.소스
#include <iostream> using namespace std; typedef int Coordinate; typedef int Dimension; // Desired interface class Rectangle { public: virtual void draw() = 0; }; // Legacy component class LegacyRectangle { public: LegacyRectangle(Coordinate x1, Coordinate y1, Coordinate x2, Coordinate y2) { x1_ = x1; y1_ = y1; x2_ = x2; y2_ = y2; cout << "LegacyRectangle: create. (" << x1_ << "," << y1_ << ") => (" << x2_ << "," << y2_ << ")" << endl; } void oldDraw() { cout << "LegacyRectangle: oldDraw. (" << x1_ << "," << y1_ << ") => (" << x2_ << "," << y2_ << ")" << endl; } private: Coordinate x1_; Coordinate y1_; Coordinate x2_; Coordinate y2_; }; // Adapter wrapper class RectangleAdapter: public Rectangle, private LegacyRectangle { public: RectangleAdapter(Coordinate x, Coordinate y, Dimension w, Dimension h): LegacyRectangle(x, y, x + w, y + h) { cout << "RectangleAdapter: create. (" << x << "," << y << "), width = " << w << ", height = " << h << endl; } virtual void draw() { cout << "RectangleAdapter: draw." << endl; oldDraw(); } }; int main() { Rectangle *r = new RectangleAdapter(120, 200, 60, 40); r->draw(); }
2.결과
g++ -o adapter adapter.cpp hacker@HACKER:~/cpp$ ./adapter LegacyRectangle: create. (120,200) => (180,240) RectangleAdapter: create. (120,200), width = 60, height = 40 RectangleAdapter: draw. LegacyRectangle: oldDraw. (120,200) => (180,240) hacker@HACKER:~/cpp$
반응형