trainings/AdvancedCppV2/Presentation/exercises/converter/converter.cpp

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;
}