반응형
옵서버 패턴(observer pattern)은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. 발행/구독 모델로 알려져 있기도 하다.\
예제
import java.util.ArrayList;
import java.util.List;
class MyValue {
private List observers
= new ArrayList();
private int state;
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
notifyAllObservers();
}
public void attach(Observer observer){
observers.add(observer);
}
public void notifyAllObservers(){
for (Observer observer : observers) {
observer.update();
}
}
}
abstract class Observer {
protected MyValue subject;
public abstract void update();
}
class PrinterObserver extends Observer{
public PrinterObserver(MyValue subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println("Printer: " + subject.getState() );
}
}
class EmailObserver extends Observer{
public EmailObserver(MyValue subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println("Email: "+ subject.getState() );
}
}
class FileObserver extends Observer{
public FileObserver(MyValue subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println("File: " + subject.getState());
}
}
public class Main {
public static void main(String[] args) {
MyValue subject = new MyValue();
new FileObserver(subject);
new EmailObserver(subject);
new PrinterObserver(subject);
subject.setState(15);
subject.setState(10);
}
}
위의 코드는 다음 결과를 출력합니다
File: 15
Email: 15
Printer: 15
File: 10
Email: 10
Printer: 10
반응형
'프로그래밍 > 자바 디자인 패턴' 카테고리의 다른 글
자바 디자인 패턴 튜토리얼 - 행동 디자인 패턴 - 자바 명령 패턴 (0) | 2021.04.18 |
---|---|
자바 디자인 패턴 튜토리얼 - 행동 디자인 패턴 - 반복자 패턴 (0) | 2021.04.18 |
자바 디자인 패턴 튜토리얼 - 행동 디자인 패턴 - 자바 인터프린터 패턴 (0) | 2021.04.18 |
자바 디자인 패턴 튜토리얼 - 행동 디자인 패턴 - 상태 패턴 (0) | 2021.04.18 |
자바 디자인 패턴 튜토리얼 - 행동 디자인 패턴 - 자바 NULL 오브젝트 패턴 (0) | 2021.04.18 |