Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- multipart테스트
- ksql
- @TransactionalEventListener
- CompletableFuture
- 리눅스
- HandlerMethodArgumentResolver
- 마이크로 서비스
- git
- intellij favorites
- ksqldb
- 자바 ORM 표준 JPA 프로그래밍
- @Transactional Propagation
- #docker compose
- Spring Cloud Netflix
- IntelliJ
- javascript case
- 자바 ORM 표준 JPA 프로그래밍 정리
- JPA
- findTopBy
- 리팩토링 2판
- Linux
- aws
- vue.js
- 원격 브랜 삭제
- java
- 친절한 SQL 튜닝
- Stream
- 백명석님
- intellij 핵심 단축키
- intellij 즐겨찾기
Archives
- Today
- Total
시그마 삽질==six 시그마
데코레이터 패턴(Decorator pattern) 본문
'Java 객체 지향 디자인 패턴' 책을 구입하시길 추천드립니다.
책 구입을 원하시는분은 요기를 클릭하시면 됩니다.
하단의 내용은 제가 예전에 읽었던 내용을 요약 정리한 것입니다.
데코레이터 패턴은 기본 기능에 추가할 수 있는 기능의 종류가 많은 경우에 각 추가 기능을 데코레이터 클래스로 정의 후 필요한 데코레이터 객체를 조합함으로써 추가 기능의 조합을 설계하는 방식임
Decorator는 메쏘드의 확장 개념임.
Reader reader = new BufferedReader(new FileReader("xxx"); 이게 다 데코레이터 패턴임
Component: 기본기능을 뜻하는 ConcreteComponent와 추가 기능을 뜻하는 Decorator의 공통 기능을 정의한다.
즉 클라이언트는 Component를 통해 실제 객체를 사용함
ConcreteComponent: 기본 기능을 구현한 클래스
Decorator: 많은 수가 존재하는 구체적인 Decorator의 공통 기능을 제공한다
ConcreteDecoratorA.B.C... : Decorator의 하위 클래스로 기본 기능에 추가되는 개별적인 기능을 뜻한다
차선을 추가하며 그리는 예제다.
public abstract class Component {
public abstract void draw() ;
}
public class ConcreteComponent extends Component { //기본기능!
public void draw() {
System.out.println("기본 도로 표시") ;
}
}
public class Decorator extends Component {
private Component component ;
public Decorator(Component component) {
this.component = component ;
}
public void draw() {
component.draw() ;
}
}
public class CrossingDecorator extends Decorator {
public CrossingDecorator(Component component) {
super(component);
}
public void draw() {
super.draw();
drawCrossing() ;
}
private void drawCrossing() {
System.out.println("교차로 표시") ;
}
}
public class TrafficDecorator extends Decorator {
public TrafficDecorator(Component component) {
super(component);
}
public void draw() {
super.draw();
drawTraffic() ;
}
private void drawTraffic() {
System.out.println("교통량 표시") ;
}
}
public class LaneDecorator extends Decorator {
public LaneDecorator(Component component) {
super(component);
}
public void draw() {
super.draw();
drawLane() ;
}
private void drawLane() {
System.out.println("차선 표시") ;
}
}
public class Client {
public static void main(String[] args) {
//Component roadWithTraffic = new TrafficDecorator(new ConcreteComponent()) ;
//roadWithTraffic.draw() ;
//Component roadWithLaneAndTraffic = new TrafficDecorator(new LaneDecorator(new ConcreteComponent())) ;
//roadWithLaneAndTraffic.draw() ;
//Component roadWithCrossingAndTraffic = new TrafficDecorator(new CrossingDecorator(new ConcreteComponent())) ;
//roadWithCrossingAndTraffic.draw() ;
Component roadWithCrossingAndTrafficAndLane = new LaneDecorator(new TrafficDecorator(new CrossingDecorator(new ConcreteComponent()))) ;
roadWithCrossingAndTrafficAndLane.draw() ;
//기본도로 표시, 교차로 표시, 교통량 표시, 차선 표시
}
}
super 타고 올라간다
LaneDecorator super.draw() 이동
->Decorator의 component.draw()이동
>TrafficDecorator super.draw()이동
->Decorator의 component.draw()이동
->CrossingDecorator super.draw()이동
->Decorator의 component.draw()이동
ConcreteComponent draw()이동해서 기본 기능 start!!
'프로그래밍 > 디자인패턴' 카테고리의 다른 글
옵저버 패턴(Observer Pattern) (0) | 2020.04.25 |
---|---|
컴퍼지트 패턴(Composite pattern) (0) | 2020.04.24 |
스테이트 패턴(State pattern) (0) | 2020.04.24 |
전략 패턴(Strategy Pattern) (0) | 2020.04.24 |
싱글톤 패턴(Singleton Pattern) (0) | 2020.04.23 |
Comments