java學習-裝飾者

1,首先新建最基本的抽象類,這個類在以後作爲其他對象new的結果進行了返回

public abstract class ABattercake {
    protected abstract String getDesc();
    protected abstract int cost();

}

2,新建第二個副加的抽象類,這個抽象類呢,是繼承了第一套的抽象的類

public abstract class AbstractDecorator extends ABattercake {
    private ABattercake aBattercake;

    public AbstractDecorator(ABattercake aBattercake) {
        this.aBattercake = aBattercake;
    }

    protected abstract void doSomething();

    @Override
    protected String getDesc() {
        return this.aBattercake.getDesc();
    }

    @Override
    protected int cost() {
        return this.aBattercake.cost();
    }
}

3,寫實踐類,首先寫主題,煎餅這個類

public class Battercake extends ABattercake {
    @Override
    protected String getDesc() {
        return "煎餅";
    }

    @Override
    protected int cost() {
        return 8;
    }
}

4,寫雞蛋這個類,這個類是繼承了副加的抽象類

public class EggDecorator extends AbstractDecorator {
    public EggDecorator(ABattercake aBattercake) {
        super(aBattercake);
    }

    @Override
    protected void doSomething() {

    }

    @Override
    protected String getDesc() {
        return super.getDesc()+" 加一個雞蛋";
    }

    @Override
    protected int cost() {
        return super.cost()+1;
    }
}

香腸類

public class SausageDecorator extends AbstractDecorator{
    public SausageDecorator(ABattercake aBattercake) {
        super(aBattercake);
    }

    @Override
    protected void doSomething() {

    }

    @Override
    protected String getDesc() {
        return super.getDesc()+" 加一根香腸";
    }

    @Override
    protected int cost() {
        return super.cost()+2;
    }
}

觀察這個類,裏面的構造函數,是使用了最基礎的那個類了

5,寫測試的類

public class Test {
    public static void main(String[] args) {
        ABattercake aBattercake;
        aBattercake = new Battercake();
        aBattercake = new EggDecorator(aBattercake);
        aBattercake = new EggDecorator(aBattercake);
        aBattercake = new SausageDecorator(aBattercake);

        System.out.println(aBattercake.getDesc()+" 銷售價格:"+aBattercake.cost());

    }
}

仔細觀察這個類,發現這個抽象的方法多次的進行了調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章