"어떻게 사용 하나 요" 관찰자 모드
9959 단어 [디자인 모드]
대상 간 에 한 쌍 이상 의 의존 관 계 를 정의 하면 한 대상 이 상 태 를 바 꿀 때 그 에 의존 하 는 모든 대상 이 알림 을 받 고 자동 으로 업 데 이 트 됩 니 다.
주제 [발표 자]
import java.util.Observable;
@Data
public class SubjectData extends Observable {
/**
*
*/
private String lookData;
/**
* ,
* @param changeData :
*/
public void lookDataChanged(String changeData) {
//
lookData = changeData;
//
this.setChanged();
//
this.notifyObservers(lookData);
}
}
구독 자
import java.util.Observable;
import java.util.Observer;
public class ObserverOne implements Observer {
/**
* , ,
*/
private Observable observable;
/**
* ,
*/
public ObserverOne(Observable observable) {
this.observable = observable;
}
/**
*
* lookDataChanged() ,
*
* @param o
* @param arg
*/
@Override
public void update(Observable o, Object arg) {
if (o instanceof SubjectData) {
String lookData = (String) arg;
System.out.println("ObserverOne get lookData = " + lookData);
}
}
/**
*
* ,
*/
public String getData() {
if (observable instanceof SubjectData) {
SubjectData subjectData = ((SubjectData) observable);
return subjectData.getLookData();
}
return "instance error";
}
}
테스트
public class TestDrive {
public static void main(String[] args) {
//
SubjectData subjectData = new SubjectData();
// ,
ObserverOne observerOne = new ObserverOne(subjectData);
ObserverTwo observerTwo = new ObserverTwo(subjectData);
//
subjectData.addObserver(observerOne);
subjectData.addObserver(observerTwo);
//
subjectData.lookDataChanged(" ");
// ,
String observerOneData = observerOne.getData();
System.out.println("observerOneData = " + observerOneData);
}
}
출력:
ObserverTwo get lookData =
ObserverOne get lookData =
observerOneData =