// 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배씩 늘어나게 된다.

// --- 상속 대신 합성을 통해 클래스 계층 구조를 감소 시킨다.


// [ 깨지기 쉬운 기반 클래스 문제 ]

// 구현 상속을 사용하면 기반 클래스의 내부구현이 수정될 때 마다 파생 클래스들이 제대로 동작하는지 확인해야함.

// -> 인터페이스 상속을 통해 해결해야 한다.



  1. public class Ex3 {
  2.  
  3.         public static void main(String[] args) {
  4.                 InputStream in;
  5.                 try {
  6.                         in = new FileInputStream("file");
  7.                         in = new BufferedInputStream(in);
  8.                         in = new ZipInputStream(in);
  9.                 } catch (Exception e) {
  10.                         e.printStackTrace();
  11.                 }
  12.                
  13.                 List<String> list = new ArrayList<>();
  14.                 list = Collections.synchronizedList(list); // Decorator 방식
  15.                 list = Collections.unmodifiableList(list);
  16.         }
  17.  
  18. }


'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

+ Recent posts