装饰模式testing0927.cpp

来源:互联网 发布:java怎么学 编辑:程序博客网 时间:2024/06/05 14:40
// 装饰模式testing0927.cpp : 定义控制台应用程序的入口点。
//


#include "stdafx.h"


#include<iostream>
using namespace std;


class Base
{
public:
virtual void show()=0;
};


class Decoratee:public Base
{
public:
virtual void show(){cout<<"it is time that:\n";};
};
class Decorator:public Base
{
private:
Base* ptrbase;
public:
Decorator(){ ptrbase=0; }
Decorator(Base* base)
{
ptrbase=base;
}
virtual void show()
{
ptrbase->show();
}
};


class HourDeco:public Decorator
{
private:
Base* _base;
public:
HourDeco(Base* base)
:_base(base)
{cout<<" ";};
virtual void show()
{
_base->show();
cout<<"Hour:999\n";
}
};


class MinuteDeco:public Decorator
{
private:
Base* _base;
public:
MinuteDeco(Base* base)
:_base(base)
{cout<<" ";};
virtual void show()
{
_base->show();
cout<<"Minute:888\n";
}
};


class SecondDeco:public Decorator
{
private:
Base* _base;
public:
SecondDeco(Base* base)
:_base(base)
{cout<<" ";};
virtual void show()
{
_base->show();
cout<<"Sec:777\n";
}
};
int main()
{


Decoratee decoratee;
Base* ptrBase=&decoratee;
HourDeco hourDeco(ptrBase);
ptrBase=&hourDeco;
MinuteDeco minuteDeco(ptrBase);
ptrBase=&minuteDeco;
SecondDeco secondDeco(ptrBase);
ptrBase=&secondDeco;
ptrBase->show();
return 0;
}