// Java Class Library Decorator Pattern.
// - 1. I/O -- InputStream, OutputStream
// -- 압축되어있는 ByteStream
// -- 1) Byte를 읽는다.
// -- 2) Buffering을 사용한다.
// -- 3) Byte stream 의 압축을 푼다.
// -> GZipInputStream
// 장점
// 1. 추후에 다른 기능을 유연하게 추가 가능 (OCP : 개방 폐쇄의 법칙)
// -- Decorator는 단 하나의 문제만을 해결하기 위해 설계되었다. (SRP : 단일 책임의 법칙)
// 2. 복잡한 문제를 단순한 조각으로 나누어 해결 (Divide and Conquer 분할정복)
// -- 설계 지향적 관점
// -- extends / implements
// -- 구현 상속 / 기능 상속
// -- 클래스 상속 / 인터페이스 상속
// -- 대부분의 상속의 문제는 구현상속을 통해서 발생한다.
// --- 구현상속은 구현이 편리한 대신 위험하다.
// --- 인터페이스 상속은 구현이 힘든 대신 안전하다.
// --- 구현상속은 행위를 변화시킬 때 많은 복잡성이 추가된다.
// --- ex. 컬렉션에 쓰레드 안정성 추가 ? 불변 클래스(immutable class) 만들어야 한다면?
// --- 구체 클래스의 갯수가 2배씩 늘어나게 된다.
// --- 상속 대신 합성을 통해 클래스 계층 구조를 감소 시킨다.
// [ 깨지기 쉬운 기반 클래스 문제 ]
// 구현 상속을 사용하면 기반 클래스의 내부구현이 수정될 때 마다 파생 클래스들이 제대로 동작하는지 확인해야함.
// -> 인터페이스 상속을 통해 해결해야 한다.
- public class Ex3 {
- public static void main(String[] args) {
- InputStream in;
- try {
- in = new FileInputStream("file");
- in = new BufferedInputStream(in);
- in = new ZipInputStream(in);
- } catch (Exception e) {
- e.printStackTrace();
- }
- List<String> list = new ArrayList<>();
- list = Collections.synchronizedList(list); // Decorator 방식
- list = Collections.unmodifiableList(list);
- }
- }
'java > design_pattern' 카테고리의 다른 글
Prototype Pattern (0) | 2014.06.27 |
---|---|
State Pattern (0) | 2014.06.27 |
Composite Pattern (0) | 2014.06.27 |
Strategy Pattern (0) | 2014.06.27 |
Template Method Pattern (0) | 2014.06.27 |