装饰模式
装饰模式是为已有功能动态的添加更多功能的一种方式,当系统需要新功能的时候,是向旧的类中添加新的代码,这些新加的代码通常装饰原有类的核心职能或主要行为
代码
// .h文件内容
class Person : public QObject
{
Q_OBJECT
public:
explicit Person(QObject *parent = nullptr);
Person(QString strName);
virtual void showTheImage() = 0;
QString m_name;
signals:
};
class samllBird : public Person
{
Q_OBJECT
public:
samllBird(QString strName);
void showTheImage();
signals:
};
class Costume : public Person
{
Q_OBJECT
public:
explicit Costume(QObject *parent = nullptr);
void setPerson(Person* p);
virtual void showTheImage();
signals:
protected:
Person* m_p;
};
class shorts : public Costume
{
Q_OBJECT
public:
explicit shorts(QObject *parent = nullptr);
void showTheImage();
signals:
};
class suit : public Costume
{
Q_OBJECT
public:
explicit suit(QObject *parent = nullptr);
void showTheImage();
signals:
};
// .cpp 内容
Person::Person(QObject *parent): QObject{parent}
{
}
Person::Person(QString strName)
{
m_name = strName;
}
samllBird::samllBird(QString strName): Person{strName}
{
}
void samllBird::showTheImage()
{
qDebug()<<"装扮的人是:"<<m_name;
}
Costume::Costume(QObject *parent): Person{parent}
{
}
void Costume::setPerson(Person* p)
{
m_p = p;
}
void Costume::showTheImage()
{
if(m_p != nullptr)
{
m_p->showTheImage();
}
}
shorts::shorts(QObject *parent): Costume{parent}
{
}
void shorts::showTheImage()
{
m_p->showTheImage();
qDebug()<<"shorts";
}
suit::suit(QObject *parent): Costume{parent}
{
}
void suit::showTheImage()
{
m_p->showTheImage();
qDebug()<<"suit";
}
// 实例显示内容
samllBird* caiNiao = new samllBird("cao niao");
//caiNiao->showTheImage();
shorts* huaShorts = new shorts;
huaShorts->setPerson(caiNiao);
//huaShorts->showTheImage();
suit* huaSuit = new suit;
huaSuit->setPerson(huaShorts);
huaSuit->showTheImage();