أولاً ، دعونا نقدم ما هو المستمع:
المستمع - هو برنامج Java عادي يقوم بتنفيذ الواجهة المعلقة. يستخدم هذا البرنامج خصيصًا للاستماع إلى مكالمات طريقة فئة أخرى.
هذا يستخدم وضع المراقب.
ما هو وضع المراقب:
يحدد التبعية الواحدة بين الكائنات. عندما تتغير حالة الكائن ، يتم إخطار جميع الكائنات التي تعتمد عليها بالتحديث تلقائيًا.
مثال:
addxxxxxlistener في برمجة واجهة المستخدم الرسومية هو كل وضع المراقب.
على سبيل المثال ، إضافة أحداث الاستماع إلى النقرات ، وإضافة أحداث الاستماع إلى لوحة المفاتيح ، إلخ.
ثلاث فئات مهمة من نمط المراقب:
مصدر الحدث الذي يتم الاستماع إليه ، أي الكائن الذي نستخدمه.
يستخدم المستمع المسجل خصيصًا للاستماع إلى الكائنات المستخدمة حاليًا.
حدث كائن الحدث هو الكائن الذي يتم الاستماع إليه!
دعونا نلقي نظرة أولاً على نسخة بسيطة من الشاشة التي كتبها بنفسك.
نسخة بسيطة:
هناك مصادر الأحداث والمستمعين وفصول الاختبار.
سيتم تنفيذ الحدث في النسخة الكاملة التالية.
خطوات التنمية:
الخطوة 1: تنفيذ شخص صف يحتاج إلى.
الخطوة 2: تنفيذ واجهة الاستماع IpersonRunListener.
الخطوة 3: في فئة الشخص ، قدم طريقة واحدة (أو متعددة ، أقوم بتقديم طريقتين هنا) لتسجيل فئات IpersonRunListener ، أي AddBefore و Addafter
الخطوة 4: يجب الحفاظ على مثيل فئة IpersonRunListener في فئة الشخص.
الخطوة 5: عند استدعاء طريقة الشخص. run ، حدد ما إذا كان IpersonRunListener فارغًا ، وإذا لم يكن فارغًا ، اتصل بأسلوب القتال.
الخطوة 6: في الفصل التجريبي ، الشخص المثالي وتسجيل مستمع.
شخص:
Package cn.hncu.designpattern1 ؛ public class person {private string name ؛ Private IpersonRunListener Bearner1 ؛ Private IpersonRunListener Bearcher2 ؛ الشخص العام (اسم السلسلة) {super () ؛ this.name = name ؛ } public void run () {if (leader1! = null) {leader1.fighting () ؛ } system.out.println (name+"Run ...") ؛ if (leader2! = null) {leader2.fighting () ؛ }} public void addbefore (IpersonRunListener beasher) {this.listener1 = beather ؛ } public void addafter (IpersonRunListener Beasher) {this.listener2 = المستمع ؛ }} interface ipersonrunlistener {public void Fighting () ؛}العرض التوضيحي
Package cn.hncu.designpattern1 ؛ demo class public {public static void main (string [] args) {person person = new person ("Zhang San") ؛ IpersonRunListener Beasher = new IpersonRunRistener () {Override Public Void Fighting () {// هناك العديد من الأشياء التي يمكنك القيام بها هنا ، ليس فقط الإخراج // ومع ذلك ، نظرًا لأنك لم تكتب كائن الحدث حتى الآن ، لا يمكنك الحصول على system.out.println ("كن مستعدًا أولاً ...") ؛ }} ؛ person.addbefore (المستمع) ؛ a = جديد a () ؛ person.addafter (a) ؛ person.run () ؛ }} الفئة A تنفذ ipersonRunListener {Override public void Fighting () {// هناك العديد من الأشياء التي يمكنك القيام بها هنا ، ليس فقط الإخراج // ومع ذلك ، نظرًا لأنك لم تكتب كائن الحدث بعد ، لا يمكنك الحصول على system.out.println التي يطلق عليها من كان ("REN ، REST ...") ؛ }}الإخراج:
أضف مصدر الحدث في النسخة الكاملة:
هنا ، تمت إضافة كائن حدث للحدث إلى الكائن السابق. يعتبر النسخة الكاملة.
خطوات التنمية:
الخطوة 1: استمر في إضافة فئة personevent استنادًا إلى الصفحة السابقة (لاحظ أنني قلت إنها فئة ، وليس واجهة) ، والتي تمثل كائن الحدث.
الخطوة 2: أضف سمة الشخص إلى كائن personevent لتحديد كائن مصدر الحدث.
الخطوة 3: تعديل طريقة القتال لواجهة PersonListener واتركها تتلقى معلمة personevent.
الخطوة 4: في طريقة تشغيل فئة الشخص ، إذا تم تحديد أن خاصية قائمة personlistener ليست فارغة ، يتم تسمى طريقة القتال ، يتم إنشاء مثيل له ، ويتم تمرير طريقة القتال إلى طريقة القتال.
الخطوة 5: في الطريقة الرئيسية ، اختبر ما إذا كان هو نفس الكائن من خلال طريقة getSource لـ personevent.
شخص
Package cn.hncu.designpattern2 ؛ public class person {private string name ؛ مستمع IpersonRunListener الخاص ؛ الشخص العام (اسم السلسلة) {super () ؛ this.name = name ؛ } public void run () {system.out.println (name+"ابدأ تشغيل ...") ؛ if (المستمع! = null) {leader.fighting (new personevent (this)) ؛ }} public void addPersonListener (IpersonRunListener beasher) {this.listener = leader ؛ } السلسلة العامة getName () {return name ؛ } Override public string toString () {return "person [name =" + name + "، leader =" + leader + "]" ؛ }} interface ipersonRunListener {public void Fighting (personevent pe) ؛} class personevent {person p = null ؛ personevent العامة (الشخص p) {this.p = p ؛ } السلسلة العامة getName () {return p.getName () ؛ } الكائن العام getSource () {return p ؛ }} // يمكننا أيضًا كتابة فئة أساسية تساعدنا على تنفيذ الواجهة // وهي تكتب قالبنا المشترك. إذا ورثنا هذا الفصل ، فيمكننا التوقف عن كتابته. // إذا كانت هناك وظائف مختلفة ، فسوف نكتبها أنفسنا لتجاوز هذا الفئة من الفئة DefaultCatListener تنفذ ipersonrunlistener {Override public void Fighting (personevent pe) {system.out.println ("الإجراء الافتراضي ...") ؛ }}DEMO.JAVA
Package cn.hncu.designpattern2 ؛ demo public class {public static void main (string [] args) {person p1 = new شخص ("Zhang San") ؛ الشخص p2 = شخص جديد ("جاك") ؛ IpersonRunListener Bearcher = new IpersonRunListener () {Override public void Fighting (personevent pe) {system.out.println (pe.getsource ()+"لقد تم تشغيله ...") ؛ if (pe.getName (). يساوي ("Zhang San")) {system.out.println (pe.getName ()+"Run to the Place ...") ؛ }}}} ؛ p1.AddpersonListener (مستمع) ؛ p2.AddpersonListener (مستمع) ؛ p1.run () ؛ p2.run () ؛ الشخص p3 = شخص جديد ("li si") ؛ p3.addpersonListener (New DefaultCatlistener ()) ؛ p3.run () ؛ }}النتائج التجريبية:
هذه هي المبادئ الأساسية. إذا قمت بتغيير إخراج الحدث فيه إلى الإجراء الذي تحتاجه ، فيمكنك إدراك الوظيفة التي تريدها. أضف مستمعًا ويمكنك الاتصال بالطريقة التي تريد الاتصال بها قبل أو بعد طريقة التشغيل والقيام بالإجراء الذي تريد القيام به!
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.