자바 모니터 의 실현 과 원리 에 대한 상세 한 설명

머리말
감청 기 는 말 그대로 어떤 사건(절차)의 발생 상황 을 감청 하고 관찰 하 는 것 이다.감청 되 는 사건 이 실제로 발생 했 을 때 사건 발생 자(사건 원)는 이 사건 을 등록 한 감청 자(감청 기)에 게 메 시 지 를 보 내 감청 자 에 게 어떤 정 보 를 알 리 는 동시에 감청 자 도 사건 대상 을 얻 을 수 있다.이 대상 에 따라 관련 속성 과 관련 작업 을 수행 할 수 있 습 니 다.
모니터 모델 은 다음 과 같은 세 가지 대상 과 관련 되 고 모델 도 는 다음 과 같다.
(1)이벤트:사용자 가 구성 요소 에 대한 조작 이나 프로그램 이 특정한 방법 을 실행 하 는 것 을 하나의 사건 이 라 고 합 니 다.예 를 들 어 로봇 프로그램 이 작업 을 수행 하 는 것 과 같 습 니 다.
(2)사건 원:사건 이 발생 하 는 구성 요 소 는 바로 사건 원,즉 감청 대상 이다.예 를 들 어 로봇 이 일 을 할 수 있 고 춤 을 출 수 있다 면 로봇 을 사건 원 으로 볼 수 있다.
(3)사건 감청 기(프로세서):사건 을 감청 하고 처리 하 는 방법,예 를 들 어 로봇 의 작업 상황 을 감청 하고 로봇 의 작업 전후 에 해당 하 는 동작 을 하거나 로봇 의 상태 정 보 를 얻는다.

실행 순 서 는 다음 과 같 습 니 다.
1.이벤트 소스 에 모니터 를 등록 합 니 다.
2.구성 요소 가 외부 역할 을 받 아들 이 는 것,즉 이벤트 가 촉발 되 는 것 입 니 다.
3.구성 요소 가 해당 하 는 이벤트 대상 을 만 들 고 이 대상 을 관련 된 이벤트 프로세서 에 전달 합 니 다.
4.이벤트 프로세서 가 시작 되 고 관련 코드 를 실행 하여 이 사건 을 처리 합 니 다.
모니터 모드:이벤트 소스 가 모니터 를 등록 한 후에 이벤트 소스 가 사건 을 촉발 하면 모니터 가 사건 대상 을 되 돌 릴 수 있 는 방법;더욱 구체 적 으로 말 하면 감청 자 모델 은 등록-리 셋 된 사건/메시지 알림 처리 모델 을 바탕 으로 피 감시 자가 모든 감시 자 에 게 메 시 지 를 알 리 는 것 이다.
1.등록 모니터:이벤트 원본.setListener.
2.반전:이벤트 소스 구현 onListener.
다음은 모니터 를 모방 한 demo 입 니 다.수요:로봇 작업 과 춤 을 실현 하고 로봇 이 작업 을 시작 하고 춤 을 추기 전에 관련 힌트 를 출력 합 니 다.
우선 이벤트 원본 로봇 을 만 듭 니 다:

package com.ssm.listener.robotListener;

/**
 *    :   
 */
public class Robot {

 private RobotListener listener;

 /**
  *         
  * @param listener
  */
 public void registerListener(RobotListener listener){
  this.listener = listener;
 }

 /**
  *   
  */
 public void working(){
  if(listener!=null){
   Even even = new Even(this);
   this.listener.working(even);
  }
  System.out.println("       ......");
 }

 /**
  *   
  */
 public void dancing(){
  if(listener!=null){
   Even even = new Even(this);
   this.listener.dancing(even);
  }
  System.out.println("       ......");
 }
}
 생 성 시간 대상 Even:

package com.ssm.listener.robotListener;

/**
 *     
 */
public class Even {

 private Robot robot;

 public Even(){
  super();
 }
 public Even(Robot robot){
  super();
  this.robot = robot;
 }


 public Robot getRobot() {
  return robot;
 }

 public void setRobot(Robot robot) {
  this.robot = robot;
 }
}
생 성 시간 모니터 인터페이스 RobotListener:

package com.ssm.listener.robotListener;

/**
 *      
 */
public interface RobotListener {

 public void working(Even even);
 public void dancing(Even even);
}
이벤트 모니터 구현 MyRobotListener:

package com.ssm.listener.robotListener;

public class MyRobotListener implements RobotListener{
 @Override
 public void working(Even even) {
  Robot robot = even.getRobot();
  System.out.println("       :         ,     !");
 }

 @Override
 public void dancing(Even even) {
  Robot robot = even.getRobot();
  System.out.println("       :         ,      !");
 }
}
이벤트 모니터 테스트 클래스
TestListener:

package com.ssm.listener.robotListener;

public class TestListener {

 public static void main(String[] args) {
  Robot robot = new Robot();
  robot.registerListener(new MyRobotListener());
  robot.working();
  robot.dancing();
 }
}
출력 결과:

총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기