Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- java 반올림
- 코딩테스트
- 백준 15661
- sort
- java 올림
- Codility
- 백준 16935
- 프로그래머스 네트워크 java
- Math.ceil()
- 백준 11723
- 네트워크
- 0으로 채우기
- Algorithm
- java 내림
- java
- 백준 4375
- mysql
- time complexity
- 알고리즘
- 백준 14391
- Math.floor()
- 프로그래머스 숫자의 표현 java
- 프로그래머스 연속된 수의 합 java
- 백준 16927
- 자바
- 백준 18290
- 프로그래머스 옹알이 java
- 프로그래머스 도둑질 java
- 백준 17425
- Arrays
Archives
- Today
- Total
취미처럼
[DP] 옵저버 패턴 본문
옵저버 패턴(observer pattern)
주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴
주체란 객체의 상태 변화를 보고 있는 관찰자이며,
옵저버들이란 이 객체의 상태 변화에 따라 전달되는 메서드 등을 기반으로 추가 변화 사항이 생개는 객체들을 의미한다.
옵저버 패턴은 주로 이벤트 기반 시스템에 사용하며 MVC 패턴에도 사용된다.
import java.util.ArrayList;
import java.util.List;
interface Subject {
public void register(Observer obj);
public void unregister(Observer obj);
public void notifyObservers();
public Object getUpdate(Observer obj);
}
interface Observer {
public void update();
}
class Topic implements Subject {
private List<Observer> observers;
private String message;
public Topic() {
this.observers = new ArrayList<>();
this.message = "";
}
@Override
public void register(Observer obj) {
if (!observers.contains(obj)) observers.add(obj);
}
@Override
public void unregister(Observer obj) {
observers.remove(obj);
}
@Override
public void notifyObservers() {
this.observers.forEach(Observer::update);
}
@Override
public Object getUpdate(Observer obj) {
return this.message;
}
public void postMessage(String msg) {
System.out.println("Message sended to Topic: " + msg);
this.message = msg;
notifyObservers();
}
}
class TopicSubscriber implements Observer {
private String name;
private Subject topic;
public TopicSubscriber(String name, Subject topic) {
this.name = name;
this.topic = topic;
}
@Override
public void update() {
String msg = (String) topic.getUpdate(this);
System.out.println(name + ":: got message >> " + msg);
}
}
public class Main {
public static void main(String[] args) {
Topic topic = new Topic();
Observer a = new TopicSubscriber("a", topic);
Observer b = new TopicSubscriber("b", topic);
Observer c = new TopicSubscriber("c", topic);
topic.register(a);
topic.register(b);
topic.register(c);
topic.postMessage("observer test");
}
}
'Design Pattern' 카테고리의 다른 글
[DP] 빌더 패턴 (0) | 2021.03.19 |
---|---|
[DP] 프록시 패턴 (0) | 2021.03.19 |
[DP] 전략 패턴 (0) | 2021.03.19 |
[DP] 팩토리 패턴 (0) | 2021.03.19 |
[DP] 싱글톤 패턴 (0) | 2021.03.19 |
Comments