设计模式例程
This commit is contained in:
96
inc/decorate.hpp
Normal file
96
inc/decorate.hpp
Normal file
@ -0,0 +1,96 @@
|
||||
#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; // <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
|
||||
};
|
||||
|
||||
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();
|
||||
|
||||
};
|
Reference in New Issue
Block a user