자바 입출력 스트림을 공부하면 데코레이터 패턴이 등장하는데, 이해가 어려워서 따로 정리했다.
데코레이터 패턴은 기반 객체(ConcreteComponent)와 그 외 다양한 기능을 제공하는 데코레이터(Decorator)를 사용하여 기반 객체가 다양한 기능을 구현할 수 있게 한다.
상속보다 유연한 확장성을 갖고, 지속적인 서비스의 증가와 제거가 편리하다.
예) 데코레이터 패턴을 사용한 빼빼로
"빼빼로"라는 추상 클래스가 있다. "빼빼로" 추상 클래스를 상속 받아 기반 객체인 "롯데 빼빼로"를 생성한다.
public abstract class Stick {
public abstract void eating();
}
public class lotteStick extends Stick{
@Override
public void eating() {
System.out.print("롯데 빼빼로를 먹는다.");
}
}
데코레이터 역할을 하는 "빼빼로"를 상속 받는 추상 클래스 "토핑" 추상 클래스를 만든다. "토핑"은 "빼빼로"의 기능을 구현하고 있지만 new 될 수 없도록 추상 클래스를 만든다.
public abstract class Decorator extends Stick{
Stick stick;
public Decorator(Stick stick) {
this.stick = stick;
}
@Override
public void eating() {
stick.eating();
}
}
"토핑"을 구현하는 클래스 "바나나맛"과 "딸기맛"을 만든다. 이 클래스들은 생성자에서 구현된 "빼빼로"를 전달 받아 기능을 추가한다.
public class Banana extends Decorator{
public Banana(Stick stick) {
super(stick);
}
@Override
public void eating() {
super.eating();
System.out.print(" 바나나맛이 추가된");
}
}
테스트 코드와 출력 결과
public class StickTest {
public static void main(String[] args) {
Stick stick = new lotteStick();
stick.eating();
System.out.println();
Stick bananaStick = new Banana(stick);
bananaStick.eating();
}
}
// 출력결과
롯데 빼빼로를 먹는다.
롯데 빼빼로를 먹는다. 바나나맛이 추가된
'study > 이거저거' 카테고리의 다른 글
OAuth 2.0 - 생활코딩 강의 정리(2) (0) | 2021.05.01 |
---|---|
OAuth 2.0 - 생활코딩 강의 정리(1) (0) | 2021.05.01 |
엉터리 정리 - yaml (0) | 2021.03.23 |
엉터리 정리 - 쿼리 스트링 (0) | 2021.03.20 |
엉터리 정리 - 깃, http, MIME (0) | 2021.03.18 |