Skip to content

Observer Pattern & Visitor Pattern

pjc0247 edited this page Nov 3, 2014 · 3 revisions

Observer Pattern

한 오브젝트에서 상태 변경이 일어나면, 자동으로 그 객체에 의존하는 다른 객체들에게 연락이 가서 상태 갱신이 일어나도록 하는 패턴. (one-to-many)

예시

  • 신문사가 있다.
  • 독자가 신문사에 구독 신청을 하면, 새로운 신문이 나올 때 마다 배달을 받는다.
  • 더 이상 신문이 필요 없으면 구독 해지 신청을 하고, 신문은 더 이상 배달되지 않는다.
  • 신문사가 남아잇는 동안 계속해서 독자들에게 신문이 배달되고, 독자는 그 동안 구독 신청 또는 구독을 해지신청 할 수 있다.

옵저버 패턴의 장점

  • 옵저버(독자) 추가/제거에 대해서 주체(신문사)를 변경할 필요가 없다.
  • 여러 객체에서 동일한 데이터에 접근 할 때 깔끔한 객체지향을 구현할 수 있다.
  • 주체와 옵저버는 재사용 될 수 잇다.

Visitor Pattern

객체의 구조와 기능을 분리시키는 패턴.
다양한 객체에 새로운 기능을 추가해야 하는데, 캡슐화가 별로 중요하지 않은 경우에 사용.

비지터 패턴은 트래버서와 같이 돌아간다, 트래서버는 모든 객체의 순회를 도와주는 역할을 한다.

Traverser -> Visitor -> Objects

비지터 패턴의 장점

  • 구조를 수정하지 않고도, 새로운 동작을 객체에 추가할 수 있다.
  • 비지터에서 수행하는 기능과 관련된 코드를 한 곳에 집중시켜 놓을 수 있다.

비지터 패턴의 단점

  • 캡슐화가 깨짐

Clone this wiki locally