装饰者设计模式

 

 

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();
    }
}

 

posted on 2021-12-15 09:57  无心睡眠A8  阅读(20)  评论(0)    收藏  举报