Decorator Pattern

wangjh789·2022년 8월 31일
0

Design Pattern

목록 보기
12/13

데코레이터 패턴은 동적으로 행동을 추기하기 위한 패턴이다.
상속은 정적이기에 구성으로 구현된다.

public interface Beverage {
    int getCost();
    String getDescription();
}
public class PlainBeverage implements Beverage {

    @Override
    public int getCost() {
        return 5;
    }

    @Override
    public String getDescription() {
        return "Plain Beverage";
    }
}

public abstract class BeverageDecorator implements Beverage {

    protected Beverage beverageDecorator;

    public BeverageDecorator(Beverage beverage) {
        this.beverageDecorator = beverage;
    }
}
public class Milk extends BeverageDecorator {

    public Milk(Beverage beverage) {
        super(beverage);
    }

    @Override
    public int getCost() {
        return beverageDecorator.getCost() + 3;
    }

    @Override
    public String getDescription() {
        return beverageDecorator.getDescription() + " milk";
    }
}
public class Sugar extends BeverageDecorator {
    public Sugar(Beverage beverage) {
        super(beverage);
    }

    @Override
    public int getCost() {
        return beverageDecorator.getCost() + 2;
    }

    @Override
    public String getDescription() {
        return beverageDecorator.getDescription() + " sugar";
    }
}
    public static void main(String[] args) {
        Beverage b = new Sugar(new Milk(new PlainBeverage()));
        System.out.println(b.getDescription());
        System.out.println(b.getCost());
    }

PlainBeverage 와 BeverageDecoration 구현체 모두 Beverage 인터페이스를 구현했다.

profile
기록

0개의 댓글