Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- class IDrawer
- {
- public:
- virtual void drawCircle(int x, int y, double radius) = 0;
- };
- class SmallCircleDrawer : public IDrawer
- {
- public:
- virtual void drawCircle(int x, int y, double radius)
- {
- std::cout << "Small circle center = ( " << x << ", " << y << " ) radius = " << radius * RADIUS_MULTIPLIER << std::endl;
- }
- private:
- static const double RADIUS_MULTIPLIER = 0.25;
- };
- class LargeCircleDrawer : public IDrawer
- {
- public:
- virtual void drawCircle(int x, int y, double radius)
- {
- std::cout << "Large circle center = ( " << x << ", " << y << " ) radius = " << radius * RADIUS_MULTIPLIER << std::endl;
- }
- private:
- static const double RADIUS_MULTIPLIER = 10.0;
- };
- class Shape
- {
- public:
- Shape(IDrawer *drawer)
- {
- this->drawer = drawer;
- }
- virtual void draw() = 0;
- virtual void enlargeRadius(double multiplier) = 0;
- protected:
- IDrawer *drawer;
- };
- class Circle : public Shape
- {
- public:
- Circle(int x, int y, double radius, IDrawer *drawer) : Shape(drawer)
- {
- this->x = x;
- this->y = y;
- this->radius = radius;
- }
- virtual void draw()
- {
- drawer->drawCircle(x, y, radius);
- }
- virtual void enlargeRadius(double multiplier)
- {
- radius *= multiplier;
- }
- private:
- int x;
- int y;
- double radius;
- };
- int main()
- {
- Circle *circle;
- circle = new Circle(5, 10, 10, new LargeCircleDrawer());
- circle->draw();
- circle = new Circle(20, 30, 100, new SmallCircleDrawer());
- circle->draw();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement