实现装饰器模式的前提:子类中覆写父类同名方法时,父类方法仍是有效的。
调用过程的理解:调用过程中一直压栈,直到dress为空时开始出栈。核心思想是方法覆写和父类方法调用。
抽象类
public abstract class Dress{
protected Dress dress;
public void setDress(Dress dress) {
this.dress = dress;
}
public void dress() {
if(dress!=null) {
dress.dress();
}
}
}
被装饰者
public class Girl extends Dress{
@Override
public void dress() {
super.dress();
System.out.println("衣服穿完了");
}
}
装饰1
public class OnePiece extends Dress {
@Override
public void dress() {
super.dress();
System.out.println("穿连衣裙");
}
}
装饰2
public class Jacket extends Dress{
public void dress() {
super.dress();
System.out.println("穿夹克");
}
}
输出:
穿连衣裙
穿夹克
衣服穿完了