在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
代码
#include <iostream>
#include <string>
using namespace std;
class building{
public:
virtual void show(){}
};
class gymBuilding:public building{ //健身房
public:
gymBuilding(const char * n):name(n){}
void show(){cout<<name<<endl;}
private:
string name;
};
class officeBuilding:public building{ //写字楼
public:
officeBuilding(const char * n):name(n){}
void show(){cout<<name<<endl;}
private:
string name;
};
class decorator:public building{ //装饰类
public:
decorator(building *b):build(b){}
virtual void myDecorator(){
build->show();
}
private:
building *build;
};
class MyDecorator:public decorator{
public:
MyDecorator(building *b):decorator(b){}
void myDecorator(){
decorator::myDecorator();
addDecorator();
}
private:
void addDecorator(){ cout<<"MyDecorator"<<endl;}
};
使用
int main(){
building *b = new gymBuilding("gymBuilding");
decorator *d = new MyDecorator(b);
d->myDecorator();
delete b;
delete d;
return 1;
}
结果
gymBuilding
MyDecorator