컬랙션에 작용하는 두번째 예제
s안에 있는 모든 요소를 2배로 출력하고 싶다.
1. 루프를 수행하면서 모든 요소를 2배로 한 후 추력하면 된다.
2. 특정 작업을 자주하게 된다면 메소드로 추가해주는 것이 좋다.
3. SList 뿐 아니라 모든 컬렉션에서 해당 작업을 자주 하게 된다.
모든 컬렉션에 해당 메소드가 추가되어야 한다.
=> 방문자 패턴을 사용하면 좋다.
방문자(Visitor) 패턴
: 컬렉션 또는 복합 객체의 내부 구조와 상관없이 요소에 연산을 수행하는 패턴
모든 방문자 객체의 인터페이스
interface Visitor{
void visit(Object value)
}
방문의 대상 객체의 인터페이스
interface Acceptor {
void accept(Visitor visitor);
}
방문자 패턴의 핵심은 accept메소드.. 이것만 정확하게 이해하면 된다.
이제 다양한 방문자를 제공하면 된다.
방문자 패턴의 문제점 : 초기에 세운 캡슐화 전략을 위배할 수 있다...
애초에 title은 setter를 만들지 않았는데, 예제처럼만들려면 title에 대해 setter가 제공되어야 하므로
초기에 세운 캡슐화 전략을 위반할 수 있다.
'Software Design Pattern' 카테고리의 다른 글
데코레이터 패턴 (0) | 2017.12.04 |
---|---|
메멘토(Memento) 패턴 (0) | 2017.12.03 |
반복자(Iterator) 패턴 (0) | 2017.12.01 |
Collection 을 설계하는 방법 (0) | 2017.11.30 |
공통성과 가변성의 분리의 원칙을 사용하는 GoF의 디자인 패턴 5가지 (0) | 2017.11.29 |