Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <string>
  4. #include <vector>
  5. #include <fstream>
  6. #include <memory>
  7. #include <boost/lexical_cast.hpp>
  8.  
  9. using namespace std;
  10.  
  11. struct Shape;
  12.  
  13. struct Renderer {
  14.     virtual void drawCircle(int x, int y, int radius) const = 0;
  15.     virtual void drawSquare(int side) const = 0;
  16. };
  17.  
  18.  
  19. struct Shape {
  20.     Shape(Renderer &renderer) : renderer(renderer) {}
  21.     Renderer& renderer;
  22.     virtual void draw() const = 0;
  23. };
  24.  
  25. struct Circle : Shape {
  26.     int x;
  27.     int y;
  28.     int radius;
  29.     Circle(Renderer& renderer, int x, int y, int radius) : Shape(renderer), x(x), y(y), radius(radius) {}
  30.  
  31.     void draw() const override {
  32.         renderer.drawCircle(x, y, radius);
  33.     }
  34. };
  35.  
  36. struct Square : Shape {
  37.     int side;
  38.     Square(Renderer &renderer, int side) : Shape(renderer), side(side) {}
  39.  
  40.     void draw() const override {
  41.         renderer.drawSquare(side);
  42.     }
  43. };
  44.  
  45. struct PointRenderer : Renderer {
  46.     void drawCircle(int x, int y, int radius) const override {
  47.         cout << "Drawing a circle as a vector of POINTS with the radius of " << radius << endl;
  48.     }
  49.  
  50.     void drawSquare(int side) const override {
  51.         cout << "Drawing a square as a vector of POINTS with the radius of " << side << endl;
  52.     }
  53. };
  54.  
  55. struct LineRenderer : Renderer {
  56.     void drawCircle(int x, int y, int radius) const override {
  57.         cout << "Drawing a circle as a vector of LINES with the radius of " << radius << endl;
  58.     }
  59.  
  60.     void drawSquare(int side) const override {
  61.         cout << "Drawing a square as a vector of LINES with the radius of " << side << endl;
  62.     }
  63. };
  64.  
  65. void bridgeDemo() {
  66.     PointRenderer pointRenderer;
  67.     LineRenderer lineRenderer;
  68.  
  69.     Circle circle1{pointRenderer, 0, 0, 10};
  70.     Circle circle2{lineRenderer, 0, 0, 10};
  71.    
  72.     circle1.draw();
  73.     circle2.draw();
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement