ホームページ >Java >&#&チュートリアル >JAVAイベント処理メカニズムをゼロから理解する
「イベント」という言葉は使い過ぎています。 「イベント」を誤用しているため、多くの人がイベントを使用するときに明確に理解せずに同じ例に倣い、その結果、長年勉強して働いているにもかかわらず、イベントプロセッサが何であるか、何が何であるかをまだ知りません。イベントホルダーです。したがって、イベントという言葉がまだ怖い場合は、この記事がまさにあなたに必要なものです。 Javaのイベント処理機構を簡単なものから難しいもの、具体的なものから抽象的なものまで段階的に説明していきます。
1: オブザーバー パターン
イベントとモニタリングを理解するには、まずオブザーバー パターンを理解する必要があります。
オブザーバー モードとは何ですか? まずよくあるシーンを見てみましょう:
まず、私はコードの問題を説明するために猫や犬、教師や生徒などのシーンを使用することに常に大反対であることを明確にしておきます。そのため、トピックは最後に実際のコードに戻ります。 。さらに近いところでは、このシーンでは、生徒が観察者であり、教師が観察される側ですが、全員が注意を払う必要があります:1: 教師が宿題を割り当て、生徒に通知します。
2: 生徒は教師が宿題を割り当ててそれをやり始めるのを観察します。 ;
観察される側として、実際には教師が主導権を握っています。上で太字で強調した言葉を見てください。 「通知」という言葉が使われているのは、これが単純な通知のように見えるためですが、実際には多くのことを行う必要があります (多くのコードを記述する必要があります)。それでは、まず上記のシナリオを実装しましょう: コード: Observer、student
package com.zuikc.events;import java.util.Observable;public class Student は Java を実装します。 .util.Observer { private String name;public Student(String name){
package com.zuikc.events;
this.name = name;
System.out.printf("生徒 %s は、% を観察しました (実際に通知されました)割り当てられた宿題 "%s" n", this.name, Teacher.getName(), arg);
}
}
Observer, Teacher
import java.util .*;
public class Teacher extends java.util.Observable { private String name;先生 Teacher1 = new Teacher("zuikc");Private string & gt;
public String getname () {
return this.name; New ArrayList & LT; String & GT;}
public void set宿題(String宿題) {System.out.printf("%s 割り当てられた宿題 %s n", this.name,宿題); add(宿題);
setChanged();
notifyObservers(宿題);}
}package com.zuikc.events;
クライアント:
public class Client {public static void main(String[] args) {
生徒 Student2 = new Student("李四");
生徒 Student1= new Student("Zhang San");
Teacher1.addObserver (student1);
Teacher1.addObserver(student2 ; Reader は自身の update を積極的に呼び出しますが、残念なことに、もちろんそうではありません。コード実装の観点から、update は「監視されている」Teacher によって積極的に呼び出されます。 Teacher setChanged();for (int i = arrLocal.length-1; i>=0; i--)
((Observer)arrLocal[i]).update(this) でしか見たことがないと言う人もいます。 、引数);
結果を見てみましょう:
上記のコードでは、java.util パッケージ内のクラス Observable とインターフェイス Observer を直接使用していることに注意してください。 もちろん、これら 2 つを自分で記述することもできます。 。
2: オブザーバーモードの基本バージョン
初心者は最初からjava.utilのAPIを使うことに慣れておらず、見たり触ったりできないと感じるかもしれないので、基本的なものを書いてみましょう著者モードの雰囲気を味わうには、前のセクションの UML 図とコードを比較し、心の中で「それらの間に違いはない、違いがある」と静かに言う必要があります。それらに違いはありません!
上の図:
上記のコード:
Observer、interface
package com.zuikc;
public Interface Observer {
void update(Observable o);
}
特定のオブザーバー,
class ConcreteObserver1implements Observer {
public void update(Observable o) {
Observation
System.out.println("Observer 1監視" + o.getClass().getSimpleName() + "Change")の2つを書きました。 ; y System.out.println ("観察者 1 が応答"); out.println ("観察者 2 が観察" + o.getClass().getSimpleName() + "変化が発生した");
System.out.println("観察者 2 が観察した") 2 人が回答しました");
}
}import java.util.List;
package com.zuikc;
import java.util.ArrayList;
public class Observable {
Listobservers = new ArrayList (); public void addObserver(Observer o) { observers.add(o); } public void doSomething() { System.out.println (「私はオブザーバーです。変更されました");
NoticeObservers();
すべてのオブザーバーに率先して通知します}
public void NoticeObservers() {
}
クライアント :public static void main(String[] args) {
package com.zuikc;
public class Client {Observable observable = new Observable();
observable.addObserver(new ConcreteObserver1());
Observable .addObserver(new ConcreteObserver2());
observable.doSomething(); }
}
自分でコードを実行して、何が起こるかを確認できます。
上記のコードでは、インターフェースとオブザーバークラスを作成しました。少し単純ですが、デモンストレーション効果が得られます。もちろん、JDK のソース コードを 2 つのファイルのコードとしてそのままコピーすることもできます。 上記のコードにすでに精通している場合は、最初のセクションで arg パラメーターを導入しましたが、この基本バージョンには含まれていません。機能を理解している限り、コードは自由です。必要に応じて持参することもできます。2: オブザーバー パターンは、オブザーバーと監視されるものの責任を分離し、クラスが独自の機能を維持できるようにし、クラスの再利用性を向上させます。システム
3: オブザーバー パターンの目的
結局のところ、最初のセクションのコードからまとめると、オブザーバー パターンの基本バージョンは次のようになります:1: Teacher クラスには何もありません。生徒のクラスに関して、彼は観察者インターフェイスのみに依存しています。ある日、彼の宿題が優秀な講師として生徒に割り当てられるだけでなく、参考のために学校全体の教師にも送信される場合。教師クラスもオブザーバー インターフェイスを実装します。教師を教師のオブザーバー リストに追加することもできます。
3: 観察は能動的な動作のように見えますが、実際には観察者が自分のビジネスコードを積極的に呼び出すのではなく、観察者によって呼び出されます。したがって、オブザーバー パターンには、パブリッシュ/サブスクライブ パターンと呼ばれる別の名前が付いています。
オブザーバー パターンには、イベント駆動型モデルという別の形式が実装されています。オブザーバー パターンを理解すると、イベント ドライバーを理解するのは非常に簡単になります。
以上がJAVAイベント処理メカニズムをゼロから理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。