59 lines
1.1 KiB
C++
59 lines
1.1 KiB
C++
#include <iostream>
|
|
#include <memory>
|
|
#include <stdexcept>
|
|
|
|
class Resource {
|
|
public:
|
|
Resource(const std::string& str): str_(str) {}
|
|
|
|
const std::string& str() const {
|
|
return str_;
|
|
}
|
|
|
|
private:
|
|
std::string str_;
|
|
};
|
|
|
|
class Converter {
|
|
public:
|
|
virtual void Convert(Resource* resource) = 0;
|
|
};
|
|
|
|
class CurlyBracketConverter : public Converter {
|
|
public:
|
|
virtual void Convert(Resource* resource) {
|
|
std::cout << "{" << resource->str() << "}\n";
|
|
}
|
|
};
|
|
|
|
class SquareBracketConverter : public Converter {
|
|
public:
|
|
virtual void Convert(Resource* resource) {
|
|
std::cout << "[" << resource->str() << "]\n";
|
|
}
|
|
};
|
|
|
|
class Printer {
|
|
public:
|
|
Printer(Converter* converter): converter_(converter) {}
|
|
|
|
void Print(Resource* resource) {
|
|
converter_->Convert(resource);
|
|
}
|
|
|
|
private:
|
|
Converter* converter_;
|
|
};
|
|
|
|
int main() {
|
|
Resource* resource = new Resource("Ala has a cat");
|
|
Printer printer(new SquareBracketConverter{});
|
|
Printer printer2(new CurlyBracketConverter{});
|
|
|
|
printer.Print(resource);
|
|
printer2.Print(resource);
|
|
|
|
delete resource;
|
|
|
|
return 0;
|
|
}
|