#include <iostream>
using namespace std;
class TextComponent {
public:
virtual ~TextComponent() { }
virtual void PrintOperation() = 0;
};
class BodyText : public TextComponent {
public:
virtual void PrintOperation() {
cout << "Body Text." << endl;
}
};
class TextDecorator : public TextComponent {
public:
TextDecorator(TextComponent *component) {
m_component = component;
}
virtual ~TextDecorator() {
delete m_component;
}
virtual void PrintOperation() {
m_component->PrintOperation();
}
private:
TextComponent *m_component;
};
class HeaderDecorator : public TextDecorator {
public:
HeaderDecorator(TextComponent *component)
: TextDecorator(component) { }
virtual void PrintOperation() {
cout << "*** Header ***" << endl;
TextDecorator::PrintOperation();
}
};
class FooterDecorator : public TextDecorator {
public:
FooterDecorator(TextComponent *component)
: TextDecorator(component) { }
virtual void PrintOperation() {
TextDecorator::PrintOperation();
cout << "*** Footer ***" << endl;
}
};
int main(int argc, char **argv) {
TextComponent *component;
component = new BodyText;
if (argc > 1) {
component = new HeaderDecorator(component);
}
if (argc > 2) {
component = new FooterDecorator(component);
}
component->PrintOperation();
delete component;
return 0;
}
参考サイト
最終更新:2011年11月16日 05:50