옵저버 패턴: 감시자를 두어 변화가 생겼을때 알려주거나 변경하거나 값을 가져오는 형식
자바스크립트라이브러리중 mobx가 해당 패턴을 사용하던거같다
package cls;
import java.util.Observable;
public class MyClass extends Observable{
private String preArg = null;
// 일반 메소드
@Override
public void notifyObservers(Object arg) {
String str = (String)arg;
// 변화가 없을떄
if(str.equals(preArg)) return;
// 변화가 있을때
preArg = str;
setChanged(); // reset
super.notifyObservers(arg);
clearChanged();
}
}
감시자 클래스 1
package observer;
import java.util.Observable;
import java.util.Observer;
public class ObserverA implements Observer {
@Override
public void update(Observable o, Object arg) {
//MyClass 서 변화가 일어나면 이곳으로 들어온다.
String str = (String)arg;
System.out.println("감시자 A입니다 통지를 받았음 : " + str);
}
}
감시자 클래스 2
package observer;
import java.util.Observable;
import java.util.Observer;
public class ObserverB implements Observer{
@Override
public void update(Observable o, Object arg) {
//MyClass 서 변화가 일어나면 이곳으로 들어온다.
String str = (String)arg;
System.out.println("감시자 B입니다 통지를 받았음 : " + str);
}
}
메인 클래스
package main;
import cls.MyClass;
import observer.ObserverA;
import observer.ObserverB;
public class mainClass {
public static void main(String[] args) {
/*
* Observer: 정찰 -> 감시
*/
MyClass cls = new MyClass();
// 감시자 A, B를 추가
cls.addObserver(new ObserverA());
cls.addObserver(new ObserverB());
cls.notifyObservers("passsword: abc123");
}
}
악용이 가능하게 만들수 있는 코드기 때문에 주의해서 사용한다고 하셨다
'Java > java 기초' 카테고리의 다른 글
awt - label (0) | 2019.12.05 |
---|---|
awt 기초 부분 공부하기 (0) | 2019.12.05 |
자바 디자인 패턴 - Factory Pattern (0) | 2019.12.04 |
Calendar (0) | 2019.12.04 |
싱글톤 패턴 공부하기 (Single Ton) (0) | 2019.12.03 |