자바 디자인 모델 의 관찰자 모델 학습

1.관찰자 모드 란 무엇 인가
간단 한 상황: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);
 }
}


이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기