포장지 패턴(Decorator Pattern)
상속은 객체의 기능의 변경이 아닌 클래스의 변경이다.
=> 동적인 변경이 아닌 정적인 변경
=> 실행 시간에 기능을 변경하는 것이 불가능하다.
기능을 추가한 객체에 다시 기능을 추가할 수 있어야 한다.
데코레이터 패턴
핵심
포장지는 객체를 포함하지만 포장된 객체를 다시 포장할 수 있어야 한다.
=> 포장지와 객체는 동일 부모가 필요하다.
재귀적 합성을 통한 기능의 추가 => 데코레이터 패턴
(Composite패턴은 재귀적 합성을 통한 복합 객체의 구성)
class RightMissile implements Item {
private Item spaceShip;
...
}
재귀적 합성을 사용하는 디자인 패턴 2가지
재귀적 합성을 통한 복합 객체 구성 - 컴포지트 패턴
재귀적 합성을 통한 기능의 추가 - 데코레이터 패턴
포장지의 공통의 특징을 부모로 제공하자.
///
a.zip 이라는 파일의 내용을 읽고 싶다.
방법 1. 클래스 하나로 구현한다.
방법 2. 세 개의 작은 문제로 나누어 처리한다. ( 모든 문제를 분할 정복할 수 가 있다)
1) 파일을 읽는다. - FileInputStream
2) 버퍼링을 한다. - BufferedInputStream
3) 압축을 푼다. - ZipInputStream
'Software Design Pattern' 카테고리의 다른 글
Cloneable (0) | 2017.12.06 |
---|---|
추상 팩토리 패턴 (0) | 2017.12.05 |
메멘토(Memento) 패턴 (0) | 2017.12.03 |
컬랙션에 작용하는 두번째 예제 (0) | 2017.12.02 |
반복자(Iterator) 패턴 (0) | 2017.12.01 |