装饰模式
在不改变原有的类的情况下,给它添加功能。对现有的类对象进行包裹和封装,以期望在不改变类对象及其类定义的情况下,为对象添加额外功能。是一种对象结构型模式。需要注意的是,该过程是通过调用被包裹之后的对象完成功能添加的,而不是直接修改现有对象的行为,相当于增加了中间层。
Mary过完轮到Sarly过生日,还是不要叫她自己挑了,不然这个月伙食费肯定玩完,拿出我去年在华山顶上照的照片,在背面写上“最好的的礼物,就是爱你的Fita”,再到街上礼品店买了个像框(卖礼品的MM也很漂亮哦),再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装起来……,我们都是Decorator,最终都在修饰我这个人呀。
#include <iostream>
using namespace std;
class Car
{
public:
virtual ~Car(){}
virtual void go()=0;
};
class RunCar : public Car
{
public:
virtual void go()
{
cout<<"car can run"<<endl;
}
};
class FlayCar : public Car
{
public:
FlayCar(Car *car)
{
this->car = car;
}
void go()
{
car->go();
flay();
}
void flay(){
cout<<"the car can flay"<<endl;
}
private:
Car *car;
};
class SwimCar : public Car
{
public:
SwimCar(Car *car)
{
this->car = car;
}
virtual void go()
{
car->go();
swim();
}
void swim()
{
cout<<"the car can swim"<<endl;
}
private:
Car *car;
};
int main()
{
Car *car = new RunCar();
car->go();
cout<<endl;
Car *flayCar = new FlayCar(car);
flayCar->go();
cout<<endl;
Car *swimCar = new SwimCar(car);
swimCar->go();
delete car;
delete flayCar;
delete swimCar;
return 0;
}