装饰器模式是指动态地给一个对象增加一些额外的功能,同时又不改变其结构。
优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。
装饰器模式的关键:装饰器中使用了被装饰的对象。
比如,创建一个对象“laowang”,给对象添加不同的装饰,穿上夹克、戴上帽子……,这个执行过程就是装饰者模式,实现代码如下。
1)定义顶层对象,定义行为
interface IPerson {
void show();
}
2)定义装饰器超类
class DecoratorBase implements IPerson{
IPerson iPerson;
public DecoratorBase(IPerson iPerson){
this.iPerson = iPerson;
}
@Override
public void show() {
iPerson.show();
}
}
3)定义具体装饰器
class Jacket extends DecoratorBase {
public Jacket(IPerson iPerson) {
super(iPerson);
}
@Override
public void show() {
// 执行已有功能
iPerson.show();
// 定义新行为
System.out.println("穿上夹克");
}
}
class Hat extends DecoratorBase {
public Hat(IPerson iPerson) {
super(iPerson);
}
@Override
public void show() {
// 执行已有功能
iPerson.show();
// 定义新行为
System.out.println("戴上帽子");
}
}
4)定义具体对象
class LaoWang implements IPerson{
@Override
public void show() {
System.out.println("什么都没穿");
}
}