#include <iostream>
using namespace std;
// 実装側側面
class Drawing {
public:
virtual void DrawLine() = 0;
virtual void DrawCircle() = 0;
};
class NormalDrawing : public Drawing {
public:
virtual void DrawLine() {
cout << "-----" << endl;
}
virtual void DrawCircle() {
cout << "ooooo" << endl;
}
};
class BoldDrawing : public Drawing {
public:
virtual void DrawLine() {
cout << "=====" << endl;
}
virtual void DrawCircle() {
cout << "OOOOO" << endl;
}
};
// 抽象的側面
class Shape {
public:
Shape(Drawing *drawing) {
m_draw = drawing;
}
virtual void draw() = 0;
protected:
void draw_line() {
m_draw->DrawLine();
}
void draw_circle() {
m_draw->DrawCircle();
}
Drawing *m_draw;
};
class Line : public Shape {
public:
Line(Drawing *drawing) : Shape(drawing) { }
virtual void draw() {
draw_line();
}
};
class Circle : public Shape {
public:
Circle(Drawing *drawing) : Shape(drawing) { }
virtual void draw() {
draw_circle();
}
};
int main(int argc, char **argv) {
Drawing *drawing;
if (argc == 1) {
drawing = new NormalDrawing;
} else {
drawing = new BoldDrawing;
}
#if 0
Shape *shape = new Line(drawing);
#else
Shape *shape = new Circle(drawing);
#endif
shape->draw();
delete drawing;
delete shape;
return 0;
}
参考サイト
最終更新:2011年11月14日 00:20