この記事では、Javaデザインパターンのリスナーモードについて説明します。次のように、参照のために共有してください。
リスナーモードには、イベントソース、イベントオブジェクト、リスナーの3つの要素があります。
イベントソース:名前が示すように、クリックされたボタンなどのイベントのソースは、聞くオブジェクトに属します。
イベントオブジェクト:これは、多くの場合、イベントソースと混同されます。多くの場合、イベントソースのパッケージ化に使用されます。結局のところ、それはイベントのクリックなど、イベントであることを忘れないでください。イベントソースの違いは、イベントソースとは異なります。それを感じる方法はありません。
リスナー:これはリスナーモードのコアであり、イベントが発生した後のアクションを定義します。通常、イベントオブジェクトは、リスナーで定義された関数としてパラメーターとして入力されます。
これがシンプルな栗です:
ストーリーの背景は、Xiao Mingが非衛生的な子供であるということです。彼の母親は彼の健康について非常に心配しており、食事の前に彼女の手を洗わなければならないことを規定しています。
いたずらな子供を定義します。いたずらな子供は監視されるオブジェクトであり、イベントのソースであり、すべてのイベントはイベントのソースによって送信されます。これはナンセンスのようです。
Public Class Child {private string name; Private RemindListener RemindListener; public child(string name){this.name = name; } public void eat(){if(null!= remindlistener){remindlistener.remind(new remindwashinghandsevent(this)); } system.out.println( "child eat ..."); } public void addListener(RemindListenerリスナー){RemindListener = listener; }}次に、イベントオブジェクトを見ることです。これは、上記のように、イベントソースをラップします。ここでは、測定前の手洗いイベントを定義します。
Public Class RemindWashingHandsevent {Private Child; Public RemindWashingHandsevent(Child Child){this.child = child; }}イベントオブジェクトは、イベントのプロパティとステータスを定義します。
イベントが発生した直後、リスナーの行動は手を洗うことを思い出させます。
Public Class RemindListener {public void remind(remindwashinghandsevent remindwashinghandsevent){system.out.println( "ママを聞いて、食べる前に手を洗う..."); }}リスナーは主にアクションをカプセル化することに注意してください。それだけです。
上記のコードは、リスナーモードの原則を説明するためだけで、コードはシンプルであまりエレガントではありません。
以下は、Java Standard Libraryを継承または実装し、1組のコードを何気なく書きます。夜遅くです。時間があれば説明します。
Public Class Kid {private string name;プライベートリスト<リスナー> LITENERS; public kid(string name){this.name = name; this.liteners = lists.newarraylist(); } public void eat(){for(リスナーリスナー:liteners){if(washinghandslistenerのリスナーインスタンス){Washinghandslistener washinghandslistener =(Washinghandslistener)リスナー; Washinghandslistener.fireftereventinvoked(new Washinghandsevent(this、 "your hands")); }} system.out.println( "eat ..."); } public void addlistener(リスナーリスナー){liteners.add(リスナー); }} public classイベントextends EventObject { /***プロトタイプイベントを作成します。 * * @paramは、イベントが最初に発生したオブジェクトをソースします。 * @Throws Sourceがnullの場合はIllegalargumentException。 */パブリックイベント(オブジェクトソース){super(source); }} public class washinghandsevent extends events {private string eventname; /***プロトタイプイベントを作成します。 * * @paramは、イベントが最初に発生したオブジェクトをソースします。 * @Throws Sourceがnullの場合はIllegalargumentException。 */ public Washinghandsevent(object source、string eventname){super(source); this.eventName = eventName; } public string geteventName(){return eventname; } public void seteventName(string eventName){this.eventName = eventName; }} public interfaceリスナーはjava.util.eventlistener {public void firefentinvoked(event event);} public class washhandslistener explenticeリスナー{@Override void fireeventinvoked(イベントイベント){wasinghandsevent whinghandsevent =(Washinghandsevent)イベント; System.out.println( "食事前の準備" + WashingHandsevent.getEventName()); }} public class test {public static void main(string [] args){kid xiaoming = new Kid( "xiaoming"); xiaoming.addlistener(new Washinghandslistener()); xiaoming.eat(); }}出力結果:
Java関連のコンテンツについては、このサイトに興味のある読者は、「Javaデータ構造とアルゴリズムのチュートリアル」、「Java操作DOMノードのヒントの概要」、「Javaファイルの要約およびディレクトリ操作のヒント」、「Java Cache操作のヒントの要約」というトピックを見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。