커맨드/데코레이터/반복자 패턴

froajnzd·2023년 6월 7일
0

pattern

목록 보기
10/15
post-thumbnail

커맨드 패턴

동기

어떤 커맨드를 선택하고 인지하기 복잡함

-여러개의 객체가 들어올 수 있는 다형성을 가짐
하나로 만들자

undo 메커니즘

  • 실행 작업 되돌리기
  • 각 command 객체마다 자신의 작업을 되돌릴수 있는 undo()함수 구현
  • 지금까지 실행된 command 객체를 모아두고, 이를 역순으로 undo() 호출
  • state 패턴이랑 구조가 비슷

목적/의도

command를 객체화해서 command를 부르고, 인식해서 호출하는 게 일관적으로 만들게(switch같은거 안쓰도록)
변수만 execute로 호출하면 되도록 만듦

적용범위

MenuItem
커멘드를 애플리케이션에서 부를 때와 실제 작업(런타임) 시점을 다르게 해야 할 때 (
undo/Macro 기능을 지원하고자 할 때 (부수적 목적)
System의 기능수행 정도를 기록하고 싶을 때

구조

사례

PasteCommand
MacroCommand
Iterator를 만들어서 list의 맨 마지막까지 계속 반복

데코레이터 패턴

기본적인 기능이 있는데, 부수적으로 추가/삭제를 쉽게 하기 위해 사용되는 패턴
요구의 융통성을 다루고 있음
재귀적 연관을 이용함

상속구조로 구현하면 융통성/변동성이 없음. 사용하는 객체를 바꿔야함
런타임에 데코레이션을 바꾸기 힘듦
->
aggregation을 사용하여 동적으로 객체에 책임을 추가함
연쇄적으로

구조

핵심

항상 실행되는 기능에 선행되거나 뒤따르는 옵션 기능의 다양성
송신 객체로 끝나는 선택 가능한 기능의 연결 리스트
장식 객체는 송신 객체와 같은 인터페이스를 가져야함
구현은 좋지 않은 설계가 될 수도 있음
Exception이 던져질 수도
데코레이터나 클라이언트가 처리해야

정리

존재하는 기능에 추가적인 기능을 덧붙이는 것

반복자(Iterator) 패턴

배경(문제상황-해결방안)

집합의 요소를 반복적으로 수행하고 싶을 때
자세한 표현방법을 나타내지 않고 객체집합의 요소들을 순차적으로접근하게 하는데 사용

설명

반복을, 집합의 요소를 포인트하는 객체 안에 캡슐화한다
리스트 객체와 방문하는 프로세스 사이의 결함을 줄인다.

구조

profile
Hi I'm 열쯔엉

0개의 댓글