>  기사  >  Java  >  JAVA 이벤트 처리 메커니즘을 처음부터 이해

JAVA 이벤트 처리 메커니즘을 처음부터 이해

巴扎黑
巴扎黑원래의
2017-06-23 16:37:251187검색

'이벤트'라는 단어가 남용되었습니다. 바로 "이벤트"의 오용으로 인해 많은 사람들이 이벤트를 사용할 때 명확하게 이해하지 못하고 동일한 예를 따르기 때문에 수년 동안 연구하고 작업한 후에도 이벤트 프로세서가 무엇인지, 무엇인지 알지 못합니다. 이벤트 홀더입니다. 따라서 여전히 이벤트라는 단어가 두렵다면 이 기사가 바로 필요한 것입니다. Java 이벤트 처리 메커니즘을 쉬운 것부터 어려운 것까지, 구체적인 것부터 추상적인 것까지 단계별로 설명하겠습니다.

1: 관찰자 패턴

이벤트와 모니터링을 이해하려면 먼저 관찰자 패턴을 이해해야 합니다.

관찰자 모드가 무엇인가요? 먼저 익숙한 장면을 살펴보겠습니다.

1: 교사가 숙제를 내주고 학생들에게 알립니다.

2: 학생은 교사가 숙제를 내는 것을 관찰하고 시작합니다.

우선 코드 문제를 설명하기 위해 고양이와 개, 교사와 학생 같은 장면을 사용하는 것을 항상 매우 반대해 왔음을 분명히 말씀드립니다. 따라서 주제는 마지막에 실제 코드로 돌아올 것입니다. . 집에 더 가까운 이 장면에서 학생들은 관찰자이고 교사는 관찰자이지만 모두가 주의를 기울여야 합니다.

관찰된 것처럼 교사가 실제로 주도권을 잡고 위에서 굵게 강조한 단어를 보십시오. 알림이라는 단어를 사용한 이유는 단순한 알림처럼 보이지만 실제로는 많은 일(많은 코드 작성)을 해야 하기 때문입니다.

좋아요, 위의 시나리오를 먼저 구현해 보겠습니다.

JAVA 이벤트 처리 메커니즘을 처음부터 이해

Code:

Observer, Student

package com.zuikc.events;

import java.util.Observable;

public class Student는 java를 구현합니다. .util.Observer {

        private String name;

      public Student(String name) {
              this.name =                                       use using using using          통과 통과 통과 통과 통과 통과 ‐   ‐‐ ‐‐‐‐‐‐ ‐ ( Teacher) o;
System.out.printf("%s 학생이 "%s" 숙제를 할당한 것을 관찰했습니다(실제로 알림을 받았습니다).", this.name, Teacher.getName(), arg);
}

}


Observer, Teacher

package com.zuikc.events;

import java.util.*;

public class Teacher 확장 java.util.Observable {

  비공개 문자열 이름;

비공개 문자열 & gt; Homeworks;

Public String getname () {

Return this.Name; 나

Homeworks = New ArrayList & LT; out.printf("%s 할당된 숙제 %s n", this.name, homework);
homeworks.add(homework);

setChanged();

informObservers(homework);

}

}




클라이언트:


package com.zuikc.events;

public class 클라이언트 {


public static void main(String[] args) {

Student Student1= new Student("Zhang San");

     Student Student2 = new Student ("lee思");
    교사 Teacher1 = new Teacher("zuikc");

    Teacher1.addObserver(student1);
    Teacher1.addObserver(student2 ; Reader는 자체 업데이트를 적극적으로 호출하지만 안타깝게도 당연히 그렇지 않습니다. 코드 구현의 경우 "관찰된" Teacher가 업데이트를 적극적으로 호출합니다. 어떤 사람들은 내가 Teacher setChanged();

for (int i = arrLocal.length-1; i>=0; i--)
((Observer)arrLocal[i]).update(this에서만 봤다고 합니다. , 인수);

결과를 살펴보겠습니다.

JAVA 이벤트 처리 메커니즘을 처음부터 이해

참고로 위 코드에서는 java.util 패키지의 Observable 클래스와 Observer 인터페이스를 직접 사용했습니다. 물론 이 두 가지를 직접 작성할 수도 있습니다. .

둘: 관찰자 모드 기본 버전

초심자는 java.util에서 API를 처음부터 사용하는데 익숙하지 않아 보거나 만질 수 없다고 느낄 수도 있으니 기본으로 작성해보자 작성자 모드를 맛보기 위해 작성 과정에서 이전 섹션의 UML 다이어그램과 코드를 비교한 다음 마음속으로 다음과 같이 말해야 합니다. 둘 사이에는 차이가 없습니다. 그들 사이에는 차이가 없습니다!

위 사진:

JAVA 이벤트 처리 메커니즘을 처음부터 이해

위 코드:

Observer, 인터페이스

package com.zuikc;

public 인터페이스 Observer {

​​ void update(Observable o);
}

Sp 특별한 관찰자 , 저는 두 가지를 썼습니다:

class ConcreteObserver1은 Observer를 구현합니다 {

public void update(Observable o) {
System.out.println("Observer 1 관찰됨" + o.getClass().getSimpleName() + "Change") ; y System.out.println ("관찰자 1이 응답함"); out.println ("관찰자 2가 관찰됨" + o.getClass().getSimpleName() + "변경 발생");
    System.out.println("Observer 2명이 응답함");
  }
}

Observation



package com.zuikc;

import java.util.ArrayList;

import java.util.List;

public class Observable {

List 관찰자 = new ArrayList();

public void addObserver(Observer o) {

        관찰자.add(o);
    }             public void doSomething() {             System.out.println ("나는 관찰자입니다. 변경됨");

                       모든 관찰자에게 먼저 알리세요

        informObservers();

  }

    public void informObservers() {

                                          }

Client :



package com.zuikc;

public class Client {

public static void main(String[] args) {
Observable observable = new Observable();
observable.addObserver(new ConcreteObserver1());
Observable .addObserver(new ConcreteObserver2());
          observable.doSomething(); }

}

코드를 직접 실행하여 어떤 일이 일어나는지 확인할 수 있습니다.

위 코드에서는 인터페이스와 관찰자 클래스를 만들었습니다. 조금 더 간단하지만 데모 효과를 얻을 수 있습니다. 물론 JDK의 소스 코드를 그대로 두 파일의 코드로 복사할 수도 있습니다.

위 코드에 이미 익숙하다면 업데이트 방법을 공부할 수도 있습니다. 첫 번째 섹션에서는 arg 매개변수를 가져왔지만 이 기본 버전에는 포함되어 있지 않습니다. 상관없습니다. 원하시면 가져오셔도 되고, 원하지 않으시면 가져오셔도 됩니다. 기능을 깨닫는 한 코드는 자유입니다.




3: 관찰자 패턴의 목적

관찰자 패턴의 기본 버전은 결국 너무 간단합니다. 첫 번째 섹션의 코드에서 요약할 수 있습니다.

1: 교사 수업에는 아무것도 없습니다. 학생 수업과 관련하여 그는 관찰자 인터페이스에만 의존합니다. 어느 날 그의 숙제는 훌륭한 강사로서 학생들에게 할당될 뿐만 아니라 참고를 위해 학교 전체의 교사에게도 전송됩니다. 교사 클래스는 또한 관찰자 인터페이스를 구현합니다. 교사는 교사의 관찰자 목록에 추가됩니다.

2: 관찰자 패턴은 관찰자와 관찰 대상의 책임을 분리하여 클래스가 자체 기능을 유지할 수 있도록 하고 재사용성을 향상시킵니다.

시스템;

3: 관찰은 능동적인 행동인 것처럼 보이지만 실제로는 관찰자가 자신의 비즈니스 코드를 적극적으로 호출하지 않습니다. 따라서 관찰자 패턴에는 게시-구독 패턴이라는 다른 이름이 있습니다. 후자가 더 적합하다고 생각합니다.

관찰자 패턴에는 이벤트 중심 모델이 구현된 또 다른 메커니즘이 있습니다. 매우 가깝습니다. 관찰자 패턴을 이해하고 나면 이벤트 드라이버를 이해하는 것은 매우 간단합니다.

위 내용은 JAVA 이벤트 처리 메커니즘을 처음부터 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.