#pragma once
#include <string>
#include <iostream>
class Decorator
{
public:
Decorator();
virtual ~Decorator();
virtual void dress() = 0;
};
class Person
{
public:
Person() {};
Person(std::string name)
{
this->name = name;
};
virtual ~Person()
{
};
virtual void show()
{
std::cout << "my name is " << this->name << std::endl;
};
private:
std::string name;
};
class Finery : public Person
{
public:
Finery() {};
void decorate(Person* person)
{
this->person = person;
};
virtual void show()
{
person->show();
};
protected:
Person* person;
};
class TShirts : public Finery
{
public:
TShirts() {};
void show()
{
std::cout << "wear TShirts" << std::endl;
Finery::show();
};
};
class BGShirts : public Finery
{
public:
BGShirts() {};
void show()
{
std::cout << "wear BGShirts" << std::endl;
Finery::show();
};
};
int main()
{
Person* per = new Person("lili");
TShirts* tsh = new TShirts();
BGShirts* bgs = new BGShirts();
tsh->decorate(per);
bgs->decorate(tsh);
bgs->show();
return 0;
}
结果:
wear BGShirts
wear TShirts
my name is lili