设计模式例程

This commit is contained in:
2025-06-02 13:57:29 +08:00
commit 22124bb827
32 changed files with 2149 additions and 0 deletions

96
inc/decorate.hpp Normal file
View 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();
};