데코레이터

구조적 패턴중에 하나로 객체의 결합을 통해 기능을 동적으로 유연하게 확장함

클래스나 객체를 조합해 더 큰 구조를 만드는 패턴이다.

예를 들면 서로다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스로 제공하던지 하는 방식이다.

아래 예시는 기본 도로를 표시하는 기능의 클래스를 데코레이션 패턴으로 구성하는 방식이다.

public class DisplayRoad {
    public void draw() {
        System.out.println("기본 도로 표시");
    }
}
public class DisplayWithRoad extends DisplayRoad {
    public void draw() {
        super.draw();
        drawTraffic();
    }

    public void drawTraffic() {
        System.out.println("교통량 표시");
    }
}
public class DisplayWithRoadTraffic extends DisplayWithRoad {
    public void draw() {
        super.draw();
        crossing();
    }

    public void crossing() {
        System.out.println("교차료 표시");
    }
}
public void decorator() {
    DisplayRoad road = new DisplayRoad();
    road.draw();

    DisplayRoad roadWith = new DisplayWithRoad();
    roadWith.draw();

    DisplayRoad roadWithTraffic = new DisplayWithRoadTraffic();
    roadWithTraffic.draw();
}
기본 도로 표시

기본 도로 표시
교통량 표시

기본 도로 표시
교통량 표시
교차료 표시