-
자바 디자인 패턴(4)_옵저버 패턴Java 2023. 11. 6. 16:59
옵저버 패턴
- 객체의 상태 변화를 보고있는 관찰자(주체)가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 추가 변화 사항이 생기는 객체들(옵저버들)에게 변화를 알리는 패턴
- MVC 패턴에서 사용된다.
- Model에서 변경사항이 생겨 옵저버인 View에게 알려주고 이를 기반으로 Controller가 동작한다.
// topic을 기반으로 옵저버 패턴을 구현 - Observer a = new TopicSubscriber("a", topic);으로 해당 이름과 어떤 topic의 옵저버가 될지 결정 import java.util.*; 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+" :: message >> " + msg); } } public class HelloWorld{ 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); /* message sended to topic : ### a :: message >> ### b :: message >> ### c :: message >> ### */ topic.postMessage("###"); } }출처)
책 : 면접을 위한 CS 전공지식 노트
'Java' 카테고리의 다른 글
자바 프록시 관련 내용(simple) (0) 2023.11.06 자바 디자인 패턴(3)_전략 패턴 (0) 2023.11.06 자바 디자인 패턴(2)_팩토리 패턴 (0) 2023.11.06 자바 디자인 패턴(1)_싱글톤 패턴 (0) 2023.11.06 자바 String, StringBuffer, StringBuilder 차이 (0) 2023.10.12