<디자인패턴입문> 14. Observer 패턴
by BFine반응형
www.yes24.com/Product/Goods/2918928
가. 무엇인가
a. 지켜보고 있다!
- 옵저버 패턴은 관찰 대상의 상태가 변화하면 관찰자에게 알려줍니다.
- 어떤 상태 변화에 따른 처리를 해야할때 효과적인 패턴이다
나. 만들어본 예제
a. Suject(관찰 대상자)의 역할
- 관찰되는 대상을 나타낸다. 그리고 관찰자 등록과 삭제하는 메서드를 가지고 있다.
public abstract class Subject {
List<Observer> observerList = new ArrayList<>();
protected final void addObserver(Observer observer){
observerList.add(observer);
}
protected final void removeObserver(Observer observer){
observerList.remove(observer);
}
public abstract void notifyObservers();
public abstract void upload();
}
b. ConcreteSubject(구체적인 관찰 대상자)의 역할
- 상태가 변화하면 등록되어있는 관찰자들에게 전달하는 역할을 한다.
- 예제에서는 YouTuberSubject가 upload 메서드를 호출시 구독자에게 알리는 부분이다.
public class SubscriberObserver implements Observer{
private String id;
public SubscriberObserver(String id) {
this.id = id;
}
@Override
public void notice() {
System.out.println(id +" : 영상 업로드 PUSH 알림받음");
}
}
c. Observer(관찰자)의 역할
- 상태가 변했습니다 라고 전달받는 역할을 담당한다.
package observer;
public interface Observer {
void notice();
}
d. ConcreteObserver(구체적인 관찰자)의 역할
- ConcreteSubject 에서 상태변화를 알려주는 창구인 메서드를 구현한다. 예제에서는 notice가 해당부분이다.
public class YouTuberSubject extends Subject {
public void subscribe(SubscriberObserver observer){
super.addObserver(observer);
}
public void unsubscribe(SubscriberObserver observer){
super.removeObserver(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observerList) {
observer.notice();
}
}
@Override
public void upload() {
notifyObservers();
}
}
e. Main
public class Main {
public static void main(String[] args) {
YouTuberSubject youTuber = new YouTuberSubject();
SubscriberObserver subscriber1 = new SubscriberObserver("sub1");
SubscriberObserver subscriber2 = new SubscriberObserver("sub2");
SubscriberObserver subscriber3 = new SubscriberObserver("sub3");
youTuber.subscribe(subscriber1);
youTuber.subscribe(subscriber2);
youTuber.subscribe(subscriber3);
youTuber.upload();
}
}
/*
"C:\Program Files\Java\jdk1.8.0_251\bin\java.exe"
sub1 : 영상 업로드 PUSH 알림받음
sub2 : 영상 업로드 PUSH 알림받음
sub3 : 영상 업로드 PUSH 알림받음
*/
다. 정리
a. 관찰하기보다 전달받길 기다린다.
- 실제로 Observer는 능동적인 관찰이 아닌 Subject로부터 전달되는것을 수동적으로 기다린다.
- 그래서 Observer(옵저버) 패턴은 Publish(발행)-Subscribe(구독) 패턴이라고도 한다.
- 즉 Subject의 상태변화를 Observer들에게 알려서 동기화를 이루는 일에 주안점을 두는 패턴이다.
Observer 패턴은 관찰 대상 객체의 상태변화를 등록된 관찰자 객체들에게 알리는 패턴이다.
반응형
'개발서적 > 디자인패턴입문' 카테고리의 다른 글
<디자인패턴입문> 16. State 패턴 (0) | 2021.05.09 |
---|---|
<디자인패턴입문> 15. Memento 패턴 (0) | 2021.05.08 |
<디자인패턴입문> 13. Mediator 패턴 (0) | 2021.05.06 |
<디자인패턴입문> 12. Facade 패턴 (0) | 2021.05.05 |
<디자인패턴입문> 11. Chain of Responsibility 패턴 (0) | 2021.05.04 |
블로그의 정보
57개월 BackEnd
BFine