![]()
public interface IHouse {
//往里面添东西
void goods();
}
public class Decorator1 implements IHouse {
@Override
public void goods() {
//不要换行输出:测试时语句
System.out.print("改水电...................");
}
}
public abstract class DecoratorAbastact implements IHouse{
//持有 被装饰者对象
private IHouse iHouse;
//赋值
public DecoratorAbastact(IHouse iHouse) {
this.iHouse = iHouse;
}
@Override
public void goods() {
iHouse.goods();
}
}
public class Decorator2 extends DecoratorAbastact {
//这个里边实际传的应该是第一次的 装饰 对象
public Decorator2(IHouse iHouse) {
super(iHouse);
}
@Override
public void goods() {
//调用一次的
super.goods();
add();
}
public void add(){
//还得有自己的装饰
System.out.print("铺墙,地板.................");
}
}
public class Decorator3 extends Decorator2 {
//实际要传提第二次的装饰对象
public Decorator3(IHouse iHouse) {
super(iHouse);
}
@Override
public void goods() {
super.goods();
add();
}
@Override
public void add() {
System.out.print("竣工");
}
}
public class TMain {
public static void main(String[] args) {
System.out.println("====第一次====");
IHouse d1 =new Decorator1();
d1.goods();
System.out.println();
System.out.println("====第二次=====");
IHouse d2 =new Decorator2(d1);
d2.goods();
System.out.println();
System.out.println("====第三次======");
IHouse d3 =new Decorator3(d2);
d3.goods();
}
}