design_patterns/09_composite.cpp
Yuki 1550d371d4
feat: Composite
Implemented a demo for the Composite.
2025-04-11 19:36:39 +08:00

56 lines
1010 B
C++

#include <iostream>
#include <memory>
#include <vector>
using namespace std;
class Shape {
public:
virtual void draw() = 0;
virtual ~Shape() = default;
};
class Square : public Shape {
public:
virtual void draw() {
cout << "Square" << endl;
}
};
class Circle : public Shape {
public:
virtual void draw() {
cout << "Circle" << endl;
}
};
// Both derived from shape, so that they can be treated as same
class ShapeGroup : public Shape {
vector<shared_ptr<Shape>> shapes;
public:
void add_shape(shared_ptr<Shape> item) {
shapes.push_back(item);
}
virtual void draw() {
cout << "draw group" << endl;
for (auto item : shapes) {
item->draw();
}
}
};
int main() {
auto s1 = make_shared<Square>();
auto s2 = make_shared<Square>();
auto c1 = make_shared<Circle>();
auto sg = make_shared<ShapeGroup>();
sg->add_shape(s1);
sg->add_shape(s2);
sg->add_shape(c1);
sg->draw();
}