어떤 커맨드를 선택하고 인지하기 복잡함
-여러개의 객체가 들어올 수 있는 다형성을 가짐
하나로 만들자
undo 메커니즘
command를 객체화해서 command를 부르고, 인식해서 호출하는 게 일관적으로 만들게(switch같은거 안쓰도록)
변수만 execute로 호출하면 되도록 만듦
MenuItem
커멘드를 애플리케이션에서 부를 때와 실제 작업(런타임) 시점을 다르게 해야 할 때 (
undo/Macro 기능을 지원하고자 할 때 (부수적 목적)
System의 기능수행 정도를 기록하고 싶을 때
PasteCommand
MacroCommand
Iterator를 만들어서 list의 맨 마지막까지 계속 반복
기본적인 기능이 있는데, 부수적으로 추가/삭제를 쉽게 하기 위해 사용되는 패턴
요구의 융통성을 다루고 있음
재귀적 연관을 이용함
상속구조로 구현하면 융통성/변동성이 없음. 사용하는 객체를 바꿔야함
런타임에 데코레이션을 바꾸기 힘듦
->
aggregation을 사용하여 동적으로 객체에 책임을 추가함
연쇄적으로
항상 실행되는 기능에 선행되거나 뒤따르는 옵션 기능의 다양성
송신 객체로 끝나는 선택 가능한 기능의 연결 리스트
장식 객체는 송신 객체와 같은 인터페이스를 가져야함
구현은 좋지 않은 설계가 될 수도 있음
Exception이 던져질 수도
데코레이터나 클라이언트가 처리해야
존재하는 기능에 추가적인 기능을 덧붙이는 것
집합의 요소를 반복적으로 수행하고 싶을 때
자세한 표현방법을 나타내지 않고 객체집합의 요소들을 순차적으로접근하게 하는데 사용
반복을, 집합의 요소를 포인트하는 객체 안에 캡슐화한다
리스트 객체와 방문하는 프로세스 사이의 결함을 줄인다.