상태 변화를 알려준다
관찰 대상의 상태가 변화하면 관찰자에게 알린다 → 상태 변화에 따른 처리를 기술할 때 효과적
예제 프로그램
관찰 당하는 대상이 갖고 있는 숫자가 변경됐을 때, 대상을 관찰하고 있는 Observer들에게 알리는 예제
클래스 및 인터페이스 목록
이름 설명
Observer | 관찰자 인터페이스 |
NumberGenerator | 수를 생성하는 추상 클래스 |
RandomNumberGenerator | 랜덤하게 수를 생성하는 클래스 |
DigitObserver | 숫자로 수를 표시하는 클래스 |
GraphObserver | 그래프로 수를 표시하는 클래스 |
Main | 동작 테스트용 클래스 |
예제 프로그램의 클래스 다이어그램
Observer 인터페이스
관찰자를 나타내는 인터페이스. 구체적인 관찰자가 이 인터페이스를 구현한다.
update 메소드를 호출하는 것은 숫자를 생성하는 NumberGenerator이다.
update 메소드는 내용이 갱신되었고 표시하는 쪽에도 갱신해달라고 전달하기 위한 메소드.
NumberGenerator 클래스
수를 생성하는 추상 클래스.
execute 메소드는 수를 생성하는 추상 메소드
getNumber 메소드는 수를 취득하는 추상 메소드
observers 필드는 NumberGenerator를 관찰하는 Observer를 저장하는 필드
RandomNumberGenerator 클래스
random 필드에는 난수 생성기가 저장
number 필드에는 난수 값이 저장
DigitObserver 클래스
관찰한 수를 숫자로 표시하는 클래스
GraghObserver 클래스
관찰한 수를 ***** 처럼 그래프로 표시하는 클래스
Observer 패턴의 등장인물
Observer 패턴의 클래스 다이어그램
더 생각해볼 것
- 디자인 패턴의 목적 중 하나는 클래스를 재사용 가능한 부품으로 만드는 것 → 교환 가능
- 추상 클래스나 인터페이스를 사용하여 구상 클래스로부터 추상 메소드를 분리한다.
- 인수로 인스턴스를 전달할 때나 필드로 인스턴스를 저장할 때는 구상 클래스형으로 하지 않고 추상 클래스나 인터페이스형으로 해둔다.
- Observer의 행위가 Subject에 영향을 미칠 때
- 변경된 Subject의 상태가 또 다시 Observer에게 통지하기 때문에 무한 순환 고리를 조심해야 한다.
- 해당 패턴은 사실 관찰하기보다 전달받기를 기다린다.
- MVC의 Model과 View 모델은 Observer 패턴의 Subject와 Observer 관계에 대응한다.
상태 변화를 알려준다
관찰 대상의 상태가 변화하면 관찰자에게 알린다 → 상태 변화에 따른 처리를 기술할 때 효과적
예제 프로그램
관찰 당하는 대상이 갖고 있는 숫자가 변경됐을 때, 대상을 관찰하고 있는 Observer들에게 알리는 예제
클래스 및 인터페이스 목록
이름 설명
Observer | 관찰자 인터페이스 |
NumberGenerator | 수를 생성하는 추상 클래스 |
RandomNumberGenerator | 랜덤하게 수를 생성하는 클래스 |
DigitObserver | 숫자로 수를 표시하는 클래스 |
GraphObserver | 그래프로 수를 표시하는 클래스 |
Main | 동작 테스트용 클래스 |
예제 프로그램의 클래스 다이어그램
Observer 인터페이스
관찰자를 나타내는 인터페이스. 구체적인 관찰자가 이 인터페이스를 구현한다.
update 메소드를 호출하는 것은 숫자를 생성하는 NumberGenerator이다.
update 메소드는 내용이 갱신되었고 표시하는 쪽에도 갱신해달라고 전달하기 위한 메소드.
NumberGenerator 클래스
수를 생성하는 추상 클래스.
execute 메소드는 수를 생성하는 추상 메소드
getNumber 메소드는 수를 취득하는 추상 메소드
observers 필드는 NumberGenerator를 관찰하는 Observer를 저장하는 필드
RandomNumberGenerator 클래스
random 필드에는 난수 생성기가 저장
number 필드에는 난수 값이 저장
DigitObserver 클래스
관찰한 수를 숫자로 표시하는 클래스
GraghObserver 클래스
관찰한 수를 ***** 처럼 그래프로 표시하는 클래스
Observer 패턴의 등장인물
Observer 패턴의 클래스 다이어그램
더 생각해볼 것
- 디자인 패턴의 목적 중 하나는 클래스를 재사용 가능한 부품으로 만드는 것 → 교환 가능
- 추상 클래스나 인터페이스를 사용하여 구상 클래스로부터 추상 메소드를 분리한다.
- 인수로 인스턴스를 전달할 때나 필드로 인스턴스를 저장할 때는 구상 클래스형으로 하지 않고 추상 클래스나 인터페이스형으로 해둔다.
- Observer의 행위가 Subject에 영향을 미칠 때
- 변경된 Subject의 상태가 또 다시 Observer에게 통지하기 때문에 무한 순환 고리를 조심해야 한다.
- 해당 패턴은 사실 관찰하기보다 전달받기를 기다린다.
- MVC의 Model과 View 모델은 Observer 패턴의 Subject와 Observer 관계에 대응한다.
'정기간행물 > daily' 카테고리의 다른 글
보드 공유 URL 설계 (다담다) (0) | 2023.10.13 |
---|---|
한빛N MSA - #5 Re-Search (1) | 2023.10.12 |
구글 드라이브 설계 (대시설기) (0) | 2023.10.09 |
유튜브 설계 (대시설기) (0) | 2023.10.08 |
채팅 시스템 설계 (대시설기) (0) | 2023.10.07 |