#include using namespace std; class Writer { public: virtual void write(char *text) { printf("%s", text); } }; class DecoratorWriter: public Writer{ protected: Writer *_writer; public: DecoratorWriter(Writer *writer) : _writer(writer) {} virtual void write(char *text) { printf("%s", text); } }; class DecoratorHTML: public DecoratorWriter { public: void write(char *text) { printf("", text); printf("

"); _writer->write(text); printf("

"); } }; class DecoratorLinkHTML : public DecoratorWriter { private: char* _reference; public: DecoratorLinkHTML(Writer *writer, const char* reference) : _writer(writer), _reference(reference) {} void write(char *text) { printf("", text); printf("", reference); _writer->write(text); printf(""); } } int main() { Writer *normal = new DecoratorHTML(new DecoratorLinkHTML(new Writer())); normal.write("Seu Texto aqui!!"); return 0; }