1. 옵저버 패턴이란?
- 어떤 객체의 상태가 변할 때 그와 연관된 객체들에게 알림을 보내는 디자인 패턴
- 야자시간에 밖에서 선생님이 오는지 살펴보는 학생을 생각하면 이해가 쉬움
2. 옵저버 패턴의 예시
Apple 제품을 사용하고 있는 사람들에게 공지사항(이벤트 발생)을 알려주는 시스템이다.
User 클래스
public class User {
public String name;
public void getMsg(String msg) {
System.out.println(this.name + "가 메세지 수신: " + msg);
}
}
사용자 Minsoo, Cheolsu 클래스
public class Minsoo extends User {
public Minsoo(String name) {
this.name = name;
}
}
public class Cheolsu extends User {
public Cheolsu(String name) {
this.name = name;
}
}
Apple 클래스 (옵저버(여기서는 User)들에게 알림을 전달)
import java.util.ArrayList;
import java.util.List;
public class Apple {
public ArrayList<User> users = new ArrayList<User>();
// 애플 알림을 구독하는 사람 추가
public void subscribe(User user) {
users.add(user);
}
// 애플 알림을 구독취소한 사람은 명단에서 제거
public void unsubscribe(User user) {
users.remove(user);
}
public void notice(String msg) {
for (User user: users) {
user.getMsg(msg);
}
}
}
Main 클래스
public class Main {
public static void main(String[] args) {
Apple apple = new Apple();
Minsoo minsoo = new Minsoo("민수");
Cheolsu cheolsu = new Cheolsu("철수");
apple.subscribe(minsoo);
apple.subscribe(cheolsu);
// 민수, 철수가 애플 구독
String msg = "아이폰미니 출시";
apple.notice(msg);
apple.unsubscribe(cheolsu);
// 철수가 애플 구독취소
msg = "아이폰12 출시";
apple.notice(msg);
}
}
// 출력
// 민수가 메세지 수신: 아이폰미니 출시
// 철수가 메세지 수신: 아이폰미니 출시
// 민수가 메세지 수신: 아이폰12 출시
'디자인 패턴 > 행위 패턴' 카테고리의 다른 글
전략 패턴 (Strategy Pattern) (0) | 2021.08.28 |
---|