decorate.h
#pragma once
#include <QDebug>
class CPhone
{
public:
virtual void showPhoneForm() = 0;
};
class CApplePhone : public CPhone
{
public:
CApplePhone(){}
void showPhoneForm()
{
qDebug() << "this is a applephone!";
}
};
class CNokiaPhone : public CPhone
{
public:
CNokiaPhone(){}
void showPhoneForm()
{
qDebug() << "this is a nokiaphone!";
}
};
class CDecorate : public CPhone
{
public:
CDecorate(CPhone *phone) :m_phone(phone){}
virtual void showPhoneForm(){m_phone->showPhoneForm();}
private:
CPhone *m_phone;
};
class CVelumDecorate : public CDecorate
{
public:
CVelumDecorate(CPhone *phone):CDecorate(phone){}
void showPhoneForm();
};
class CCrustDecorate : public CDecorate
{
public:
CCrustDecorate(CPhone *phone):CDecorate(phone){}
void showPhoneForm();
};
decorate.cpp
#include "decorate.h"
void CVelumDecorate::showPhoneForm()
{
CDecorate::showPhoneForm();
qDebug() << "this phone paste a velum";
}
void CCrustDecorate::showPhoneForm()
{
CDecorate::showPhoneForm();
qDebug() << "this phone add a crust";
}
main.cpp
#include <QApplication>
#include "decorate.h"
int main(int argc,char **argv)
{
QApplication app(argc,argv);
CPhone *apple = new CApplePhone;
CPhone *nokia = new CNokiaPhone;
CDecorate *velum = new CVelumDecorate(apple);
velum->showPhoneForm();
CDecorate *crust = new CCrustDecorate(nokia);
crust->showPhoneForm();
return app.exec();
}