5장 데코레이터 패턴
데코레이터는 장식하는 원래 객체와 동일한 타입의 객체임->장식된 객체를 원래 객체 대신 사용 가능함
한 객체를 여러 개의 데코레이터로 장식할 수 있음
동적으로 실행시간에 객체를 장식할 수 있음
보통 장식된 순서가 중요하지 않음
) -->
객체에 동적으로 새로운 책임(행위,상태)를 추가할 수 있음(wrapper)
위임을 통한 문제해결
) -->
데코레이터들을 대표하는 추상클래스를 정의하면 얻어지는 장점: 장식자와 장식될 수 있는 타입의 구분이 명확해짐. 장식자가 반드시 정의해야 하는 메소드를 지정할 수 있음
) -->
동일한 요소를 여러번 적용 가능해야 하면 전략패턴으로 하면 안됨
또 전략패턴은 특정 메소드의 기능만 변경하지만 장식자 패턴은 여러 메소드의 기능을 변경할 수 있음
) -->
패턴의 특성 : 구조
패턴의 수준 : 컴포넌트
용도:
상속에 의한 제약사항에 구속받지 않고 동적으로 객체에 기능 또는 상태를 추가하고 싶을 경우
시스템에 동작하면서 객체에 기능을 추가하고 제거하고 싶을 경우
동적으로 객체에 추가할 수 있는 서로 독립적인 다양한 기능들이 존재할 때
장단점
코딩이 단순해지며, 클래스의 응집력을 높일 수 있음
상속보다 유연하게 객체에 기능 또는 상태를 추가할 수 있으며 나중에 제거도 가능함. 또 어떤 책임을 두 번 적용하기도 쉬움
클래스가 비교적 많이 정의될 수 있고 디버깅이 힘들어질 수 있음. 참고->실제로 클래스 수를 줄이기 위해 이패턴을 사용함
관련 클래스들을 중복되어 있는 장식 요소를 한 곳에 정의할 수 있음
) -->
구현 고려사항
최상위 컴포넌트 클래스가 가벼워야 함. 그래야 그것을 상속받은 나머지 클래스들도 안무거워짐
하나의 책임만 추가해야 하면 꼭 abstract decorator를 정의할 필요가 없음
'컴퓨터 공학' 카테고리의 다른 글
객체지향개발론-싱글톤패턴까지 정리 (0) | 2015.11.27 |
---|---|
컴파일러 - javacc로 계산기 만들기(소스) (0) | 2015.11.27 |
객체지향개발론 4장 옵저버패턴 (0) | 2015.11.27 |
객체지향개발론_3장.전략패턴 (0) | 2015.11.27 |
2장. 객체지향 개발 절차와 UML (0) | 2015.11.27 |