装飾図案


いわゆる装飾図案


オブジェクトをマージすることで、機能のモードを動的に柔軟に拡張できます.
基本機能に追加できる機能の種類が多い場合は、各付加機能をDecoratorクラスとして定義し、必要なDecoratorオブジェクトを組み合わせることで付加機能の組み合わせを設計することができます.

使用例


成分はコーヒー、成分はケニアアメリカンコーヒー、エチオピアなどの対象(成分)と牛乳、シロップ、クリーム(アクセサリー対象)の組み合わせです.
public abstract class Coffee {

    public abstract void brewing();
}

public abstract class Decorator extends Coffee {

    Coffee coffee;
    public Decorator(Coffee coffee) {

        this.coffee = coffee;
    }

    @Override
    public void brewing() {
        coffee.brewing();
    }
}

public class KenyaAmericano extends Coffee {

    @Override
    public void brewing() {
        System.out.print("KenyaAmericano ");
    }
}

public class EtiopiaAmericano extends Coffee {

    @Override
    public void brewing() {
        System.out.print("EtiopiaAmericano ");
    }
}

public class Latte extends Decorator {

    public Latte(Coffee coffee) {
        super(coffee);
    }

    public void brewing() {
        super.brewing();
        System.out.print("Adding Milk ");
    }
}

public class Mocha extends Decorator {

    public Mocha(Coffee coffee) {
        super(coffee);
    }

    @Override
    public void brewing() {
        super.brewing();
        System.out.print("Adding Mocha Syrup ");
    }
}
*リファレンス-クイックキャンパスオンラインレッスン