객체의 상태 변화를 관찰하는 관찰자(Observer)들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 notify를 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴
* 어떤 객체의 변경사항이 발생했을 때 이와 연관된 객체들에게 알려주는 디자인 패턴
* 발행 / 구독 모델


Interface Observer
public interface Observer {
String getName();
void update(String message);
}
Interface Publisher
public interface Publisher {
void add(Observer observer);
void delete(Observer observer);
void notifyObserver(String message);
}
Abstract AbstractObserver
public abstract class AbstractObserver implements Observer{
private String name;
public AbstractObserver(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void update(String message) {
System.out.println(name+" 수신 : "+ message);
}
}
Class Notice
import java.util.ArrayList;
import java.util.List;
public class Notice implements Publisher{
List<Observer> observers = new ArrayList<>();
@Override
public void add(Observer observer) {
System.out.println(observer.getName()+" 추가");
observers.add(observer);
}
@Override
public void delete(Observer observer) {
System.out.println(observer.getName()+" 제거");
observers.remove(observer);
}
@Override
public void notifyObserver(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}
}
Class User
public class User extends AbstractObserver{
public User(String name) {super(name);}
}
Main
public class Main {
public static void main(String[] args) {
Notice notice = new Notice();
User user1 = new User("유저 1");
User user2 = new User("유저 2");
notice.add(user1);
notice.add(user2);
notice.notifyObserver("알림 발송");
notice.delete(user2);
notice.notifyObserver("알림 발송");
}
}

장점 :
- 실시간으로 한 객체의 변경사항을 다른 객체에 전파
- 느슨한 결합으로 시스템이 유연하고 객체간의 의존성을 제거할 수 있다.
단점 :- 너무 많이 사용하게 되면, 상태 관리가 힘들어짐.- 데이터 배분 문제가 생기면 자칫 큰 문제로 이어질 수 있다.
참고 :
옵저버 패턴 개념 떠먹여드립니다 🥄
네티즌들은 '개념을 이해 당해버렸다' 등의 반응을 보였다.
velog.io
https://coding-factory.tistory.com/710
[Design Pattern] 옵저버 패턴(Observer Pattern)에 대하여
옵저버 패턴(Observer Pattern)이란? 옵저버패턴이란 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의
coding-factory.tistory.com
(디자인 패턴) 옵저버 패턴이란 (Observer Pattern)
✋ 옵저버 패턴이란 (Observer Pattern) 옵저버 패턴 (Observer) 관찰자 이벤트가 발생하면 각 옵저버는 콜백을 받습니다. ⚡️ 옵저버란 옵저버 패턴(observer pattern)은 객체의 상태 변화를 관찰하는 옵저
zerocodings.com
| [Design Pattern] Command Pattern (0) | 2023.03.21 |
|---|---|
| [Design Pattern] Factory Method Pattern (0) | 2023.03.19 |
| [Design Pattern] Template Method Pattern (0) | 2023.03.17 |
| [java] ThreadPool (1) | 2023.02.23 |
| [Java] Map 동시성 (1) | 2022.12.22 |