Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <string>
- #include <vector>
- #include <fstream>
- #include <memory>
- #include <boost/lexical_cast.hpp>
- using namespace std;
- struct Shape;
- struct Renderer {
- virtual void drawCircle(int x, int y, int radius) const = 0;
- virtual void drawSquare(int side) const = 0;
- };
- struct Shape {
- Shape(Renderer &renderer) : renderer(renderer) {}
- Renderer& renderer;
- virtual void draw() const = 0;
- };
- struct Circle : Shape {
- int x;
- int y;
- int radius;
- Circle(Renderer& renderer, int x, int y, int radius) : Shape(renderer), x(x), y(y), radius(radius) {}
- void draw() const override {
- renderer.drawCircle(x, y, radius);
- }
- };
- struct Square : Shape {
- int side;
- Square(Renderer &renderer, int side) : Shape(renderer), side(side) {}
- void draw() const override {
- renderer.drawSquare(side);
- }
- };
- struct PointRenderer : Renderer {
- void drawCircle(int x, int y, int radius) const override {
- cout << "Drawing a circle as a vector of POINTS with the radius of " << radius << endl;
- }
- void drawSquare(int side) const override {
- cout << "Drawing a square as a vector of POINTS with the radius of " << side << endl;
- }
- };
- struct LineRenderer : Renderer {
- void drawCircle(int x, int y, int radius) const override {
- cout << "Drawing a circle as a vector of LINES with the radius of " << radius << endl;
- }
- void drawSquare(int side) const override {
- cout << "Drawing a square as a vector of LINES with the radius of " << side << endl;
- }
- };
- void bridgeDemo() {
- PointRenderer pointRenderer;
- LineRenderer lineRenderer;
- Circle circle1{pointRenderer, 0, 0, 10};
- Circle circle2{lineRenderer, 0, 0, 10};
- circle1.draw();
- circle2.draw();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement