Qt C++ decorate模式

来源:互联网 发布:短网址网站源码 编辑:程序博客网 时间:2024/06/10 10:06

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();
}