45 lines
766 B
C++
45 lines
766 B
C++
#include <iostream>
|
|
#include <memory>
|
|
|
|
using namespace std;
|
|
|
|
class Shape {
|
|
public:
|
|
virtual void draw() = 0;
|
|
};
|
|
|
|
class Circle : public Shape {
|
|
public:
|
|
virtual void draw() override {
|
|
cout << "Circle draw" << endl;
|
|
}
|
|
};
|
|
|
|
class Square : public Shape {
|
|
public:
|
|
virtual void draw() override {
|
|
cout << "Square draw" << endl;
|
|
}
|
|
};
|
|
|
|
class Factory {
|
|
public:
|
|
unique_ptr<Shape> generate(const string& s) {
|
|
if (s == "circle") {
|
|
return make_unique<Circle>();
|
|
} else if (s == "square") {
|
|
return make_unique<Square>();
|
|
}
|
|
|
|
return nullptr;
|
|
}
|
|
};
|
|
|
|
int main() {
|
|
Factory f;
|
|
unique_ptr<Shape> s = f.generate("circle");
|
|
s->draw();
|
|
s = f.generate("square");
|
|
s->draw();
|
|
}
|