「デザインPattern」装飾図案
装飾図案
こうぞう
インプリメンテーション
道しるべの方法を実施してみましょう.
Display.class
public abstract class Display {
public abstract void draw();
}
RoadDisplay.class
public class RoadDisplay extends Display{
public void draw() { System.out.println("기본 도로 표시"); }
}
public abstract class DisplayDecorator extends Display {
private Display decoratedDisplay;
public DisplayDecorator(Display decoratedDisplay) {
this.decoratedDisplay = decoratedDisplay;
}
@Override
public void draw() { decoratedDisplay.draw(); }
}
LaneDecorator.class
public class LaneDecorator extends DisplayDecorator {
public LaneDecorator(Display decoratedDisplay) { super(decoratedDisplay); }
@Override
public void draw() {
super.draw(); // 설정된 기존 표시 기능을 수행
drawLane(); // 추가적으로 차선을 표시
}
// 차선 표시 기능만 직접 제공
private void drawLane() { System.out.println("\t차선 표시"); }
}
TrafficDecorator.class
public class TrafficDecorator extends DisplayDecorator {
public TrafficDecorator(Display decoratedDisplay) { super(decoratedDisplay); }
@Override
public void draw() {
super.draw(); // 설정된 기존 표시 기능을 수행
drawTraffic(); // 추가적으로 교통량을 표시
}
// 교통량 표시 기능만 직접 제공
private void drawTraffic() { System.out.println("\t교통량 표시"); }
}
Main.class
public static void main(String[] args) {
Display roadWithLaneAndTraffic =
new TrafficDecorator(
new LaneDecorator(
new RoadDisplay()));
roadWithLaneAndTraffic.draw();
}
>>> 기본 도로 표시
차선 표시
교통량 표시
クライアントクラスは、同じ表示クラスでのみ道路情報を一貫して表示できます.
メリットとデメリット
Reference
この問題について(「デザインPattern」装飾図案), 我々は、より多くの情報をここで見つけました https://velog.io/@cham/Design-Pattern-데코레이터-패턴テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol