자바 디자인 모델 의 관찰자 모델 학습
간단 한 상황:A,B,C,D 등 네 개의 독립 된 대상 이 있 는데 그 중에서 B,C,D 라 는 세 대상 은 A 대상 이 바 뀌 는 첫 번 째 시간 에 이런 변 화 를 알 고 해당 하 는 응답 이나 대책 을 세우 고자 한다.
위의 이런 상황 은 바로 관찰자 모델 이다.
물론 여러 관찰자,여러 피 관찰자 가 있 을 수 있다.
관찰자 와 피 관찰자 도 대립 하 는 것 이 아니 라 한 대상 이 다른 대상 을 관찰 할 수도 있 고 다른 대상 에 의 해 관찰 될 수도 있다.
2.관찰자 모드 의 응용
관찰자 모델 이 무엇 인지 잘 이해 하기 위해 다음 에 제 가 이 모델 을 사용 할 수 있 는 상황 이나 예 를 들 겠 습 니 다.
(1)주기 적 인 임무.예 를 들 어 Liux 의 주기 적 인 작업 명령 crontab 명령,win 7 의 정시 끄 기 명령 shutdown-s-t 1200(1200 s 후 끄 기).이 명령 들 은 예상 시스템 시간 이 되면 해당 관찰자 에 게 해당 하 는 명령 을 활성화 하 라 고 알 릴 수 있다.
(2)프로필 을 다시 불 러 옵 니 다.현재 대형 시스템 에 서 는 기본적으로 설정 파일 이 있 습 니 다.예 를 들 어 SSH 프로젝트 에서 설정 파일 을 수정 할 때마다 서버 를 다시 시작 해 야 새로운 설정 파일 이 적 용 됩 니 다.(물론 SSH 에 서 는 매개 변수 설정 이 제 공 된 것 같 습 니 다.설정 파일 이 수정 되면 자동 으로 다시 불 러 올 수 있 습 니 다)
3.관찰자 모드 에 필요 한 자바 클래스
3.1 java.util.Observable
-able 은 일반적으로...할 수 있 는 단어 접미사 입 니 다.Observable 은 관찰 할 수 있 습 니 다.프로그램의 피 관찰자 류 는 이 종 류 를 계승 해 야 합 니 다.
3.2 java.util.Observer
이것 은 관찰자 이 고 인터페이스 이다.프로그램의 관찰자 류 는 이 인터페이스의 update()방법 을 실현 해 야 합 니 다.
4.프로그램 인 스 턴 스+설명
4.1 신분 이 단일 한 관찰자(피 관찰자)
4.1.1 피 관찰자 류
package com.sc.demo2;
import java.util.Observable;
/**
* @author ZBX
*
*/
public class NumObserverable extends Observable{
int data = 0 ;
public void setData(int i ){
data = i;
setChanged(); // Observable
notifyObservers();//
}
public int getData() {
return data;
}
}
4.1.2 관찰자 류
package com.sc.demo2;
import java.util.Observable;
import java.util.Observer;
/**
* @author ZBX
*
*/
public class NumObserver implements Observer{
@Override
public void update(Observable o, Object arg) {
NumObserverable myObserable = (NumObserverable) o;
System.out.println("Data has changed to "+ myObserable.getData());
}
}
4.1.3 테스트 테스트 클래스
package com.sc.demo2;
public class Test {
public static void main(String[] args) {
NumObserverable number = new NumObserverable();//
number.addObserver(new NumObserver());// number ( )
number.setData(1);
number.setData(2);
number.setData(3);
}
}
테스트 출력:4.2 관찰자 이자 피 관찰자
4.2.1 MultA 류
package com.sc.demo2;
import java.util.Observable;
import java.util.Observer;
public class MultA extends Observable implements Observer{
@Override
public void update(Observable o, Object arg) {// , update
MultB multb = (MultB) o ;//
System.out.println("MultA MultB ");
setChanged();
notifyObservers();// ,
}
}
4.2.2 MultB 클래스
package com.sc.demo2;
import java.util.Observable;
import java.util.Observer;
public class MultB extends Observable implements Observer{
int data = 0 ;
@Override
public void update(Observable o, Object arg) {
System.out.println("MultB MultA , 。。。。");
}
public int getData() {
return data;
}
public void setData(int i) {
data = i;
setChanged();// Observable
notifyObservers();//
}
}
4.2.3 테스트 테스트 클래스
package com.sc.demo2;
public class Test {
public static void main(String[] args) {
// NumObserverable number = new NumObserverable();//
// number.addObserver(new NumObserver());// number ( )
// number.setData(1);
// number.setData(2);
// number.setData(3);
MultA multa = new MultA();
MultB multb = new MultB();
multb.addObserver(multa);
multa.addObserver(multb);
multb.setData(1);
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.