일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ps
- 디자인패턴
- C언어
- 생성패턴
- 반복자
- 옵저버
- UML
- 빌더패턴
- 데코레이터패턴
- 추상팩토리
- 완전탐색
- C
- 어댑터패턴
- 14500
- 백준
- 재귀
- 이터레이터
- 행위패턴
- 회전하는큐
- problemsolving
- 팩토리메소드
- c++
- 테트로미노
- AbstractFactory
- FactoryMethod
- 다이어그램
- 클래스다이어그램
- 알고리즘
- 구조패턴
- bfs
- Today
- Total
salsa source
[디자인패턴]클래스다이어그램(3) 구조패턴 - 데코레이터, 어댑터 본문
구조패턴
더 큰 구조를 형성하기 위해 어떻게 객체를 합성하는지와 관련된 패턴
클래스구조패턴 > 상속을 통한 인터페이스나 구현을 복합하는 패턴 > Adapter
객체구조패턴 > 새로운 기능을 실현하기 위해 객체를 합성하는 법 제공
>Bridge, Composite, Decorator, Proxy, Flyweight
데코레이터패턴(Decorator Pattern)
- 서브클래스에 유연성을 제공하여 소스를 변경하지 않고서도 부가적인 기능이 확장되어 실행할 수 있도록 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴
장점
유연하게 기능 확장이 가능하다(상속보다는 더 융통성이 좋음)
단점
자잘한 클래스가 많이 생기기 때문에 각 데코레이터 클래스들의 역할을 알아야한다.
예시 : 자바 파일 I/O
InputStream은 추상구성요소, 모든 보조스트림의 조상인 FilterInputStream은 추상데코레이터
이를 상속받아 구현하는 BufferInputStream은 구상데코레이터
InputStream을 상속받는 FileInputStream 같은 기반 스트림은 구상 구성요소
관련 패턴
* 어댑터패턴 : 어댑터패턴은 다른 두 개의 인터페이스(API) 연결을 위함
데코레이터패턴은 API 변경 없이 장식을 만듦
* 전략패턴 : 전략패턴은 알고리즘을 교체하여 기능을 변경 데코레이터패턴은 장식을 교체하거나 겹쳐서 기능 추가
https://daddycat.blogspot.kr/2011/05/decorator-pattern.html
어댑터패턴(Adapter Pattern)
- 한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환. 인터페이스의 호환성 문제때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.
- 신식 클래스에 구식 클래스를 연동하여 사용 가능
- 기능이나 용도가 비슷하나 클래스의 메소드명, 인터페이스가 다른 경우 일치시키는 데 사용
- 기존 클래스 코드를 수정이 불가능한 경우, 새로 만든 클래스의 정보를 은닉하고자 하는 경우
관련 패턴
* 브릿지패턴 : 기능의 계층과 구현 계층을 연결 / 어댑터패턴은 인터페이스가 다른 클래스들을 연결
* 데코레이터패턴 : 인터페이스 변경 없이 기능 추가 / 어댑터패턴은 인터페이스가 다른 것을 메우기 위함
참고
'STUDY > 디자인패턴' 카테고리의 다른 글
[디자인패턴]클래스다이어그램(2) 행위패턴 - 반복자, 관찰자, 전략 (0) | 2018.04.02 |
---|---|
[디자인패턴]클래스다이어그램(1) 생성패턴 - 빌더, 추상팩토리, 팩토리메소드, 싱글톤 (0) | 2018.04.02 |
[디자인패턴] Observer패턴 (0) | 2018.02.08 |
[디자인패턴]소개 및 Iterator 패턴 (0) | 2018.02.07 |