#include
#include
using namespace std;
class Component {
public:
virtual void doSomething() = 0;
virtual ~Component() {}
};
class Person : public Component {
public:
void doSomething() override {
cout << "Person information like this" << endl;
}
};
class Decorator : public Component {
private:
shared_ptr _component;
virtual void doSomethingElse() = 0;
public:
Decorator(shared_ptr component) : _component(component) {}
virtual void doSomething() override {
_component->doSomething();
doSomethingElse();
}
};
class DecoratorWithClothes : public Decorator {
public:
DecoratorWithClothes(shared_ptr component) : Decorator(component) {}
void doSomethingElse() override {
cout << "decorator with clothes" << endl;
}
};
class DecoratorWithShoes : public Decorator {
public:
DecoratorWithShoes(shared_ptr component) : Decorator(component) {}
void doSomethingElse() override {
cout << "decorator with shoes" << endl;
}
};
class DecoratorWithHair : public Decorator {
public:
DecoratorWithHair(shared_ptr component) : Decorator(component) {}
void doSomethingElse() override {
cout << "decorator with hair" << endl;
}
};
class DecoratorWithGloves : public Decorator {
public:
DecoratorWithGloves(shared_ptr component) : Decorator(component) {}
private:
void doSomethingElse() override {
cout << "decorator with gloves" << endl;
}
};
int main() {
auto pcs = make_shared(
make_shared(
make_shared(
make_shared())));
pcs->doSomething();
cout << endl;
auto pcsg = make_shared(pcs);
pcsg->doSomething();
}
输出