#pragma once #include "common.hpp" class Person { public: virtual void wear(); protected: string m_Name; }; class Engineer :public Person { public: Engineer(string name, string skill) :m_Name(name), m_Skill(skill) {}; string getSkill(); virtual void wear(); private: string m_Skill; string m_Name; }; class Teacher :public Person { public: Teacher(string name, string title) :m_Name(name), m_Title(title) {}; string getTitle(); virtual void wear(); private: string m_Name; string m_Title; }; class ClothingDecorator :public Person { public: ~ClothingDecorator(); virtual void wear(); virtual void decorate() = 0; protected: Person* m_pPerson; // ¸¸ÀàÖ¸Õë }; class CasualPantDecorator :public ClothingDecorator { public: CasualPantDecorator(Person* pPerson) { this->m_pPerson = pPerson; }; virtual void decorate(); }; class BeltDecorator :public ClothingDecorator { public: BeltDecorator(Person* pPerson) { this->m_pPerson = pPerson; }; virtual void decorate(); }; class LeatherShoesDecorator :public ClothingDecorator { public: LeatherShoesDecorator(Person* pPerson) { this->m_pPerson = pPerson; }; virtual void decorate(); }; class KnittedSweaterDecorator :public ClothingDecorator { public: KnittedSweaterDecorator(Person* pPerson) { this->m_pPerson = pPerson; }; virtual void decorate(); }; class WhiteShirtDecorator :public ClothingDecorator { public: WhiteShirtDecorator(Person* pPerson) { this->m_pPerson = pPerson; }; virtual void decorate(); }; class GlassesDecorator :public ClothingDecorator { public: GlassesDecorator(Person* pPerson) { this->m_pPerson = pPerson; }; virtual void decorate(); };