装饰器模式的可以在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能),它属于对象结构型模式。
装饰器模式和适配器模式的区别:
适配器模式是把一个类型转变成另一个类型,并且保持原类型的功能不变
装饰器模式是把一个类型的功能进行扩展,类型保持不变。
举个栗子:一个小朋友要穿衣服
interface Child{
void wear();
}
class Li implements Child{
@Override
void wear(){
sout("I'm Li");
}
}
class JacketDecorator implements Child{
Child child;
public JacketDecorator(Child child){
this.child = child;
}
@Override
void wear(){
child.wear();
dosomething();
}
void dosomething(){
sout("I wear Jacket.");
}
}
class TrousersDecorator implements Child{
Child child;
public TrousersDecorator(Child child){
this.child = child;
}
@Override
void wear(){
child.wear();
dosomething();
}
void dosomething(){
sout("I wear Trousers.");
}
}
main(){
Child li = new Li();
JacketDecorator jd = new JacketDecorator(li);
jd.wear();
TrousersDecorator td = new TrousersDecorator(jd);
td.wear();
}