ก่อนอื่นมาแนะนำว่าผู้ฟังคืออะไร:
Listener - เป็นโปรแกรม Java ธรรมดาที่ใช้อินเทอร์เฟซที่รอดำเนินการ โปรแกรมนี้ใช้โดยเฉพาะเพื่อฟังการโทรวิธีการของคลาสอื่น
นี่คือการใช้โหมดผู้สังเกตการณ์
โหมดผู้สังเกตการณ์คืออะไร:
กำหนดการพึ่งพาแบบหนึ่งถึงหลายคนระหว่างวัตถุ เมื่อสถานะของวัตถุเปลี่ยนแปลงวัตถุทั้งหมดที่ขึ้นอยู่กับมันจะได้รับแจ้งให้อัปเดตโดยอัตโนมัติ
ตัวอย่าง:
addxxxxListener ในการเขียนโปรแกรม GUI เป็นโหมดผู้สังเกตการณ์ทั้งหมด
ตัวอย่างเช่นการเพิ่มกิจกรรมการฟังลงในการคลิกปุ่มเพิ่มกิจกรรมการฟังลงในแป้นพิมพ์ ฯลฯ
รูปแบบผู้สังเกตการณ์สามประเภทที่สำคัญ:
แหล่งที่มาของเหตุการณ์ที่ถูกฟังนั่นคือวัตถุที่เราใช้
ผู้ฟังที่ลงทะเบียนใช้โดยเฉพาะเพื่อฟังวัตถุที่ใช้ในปัจจุบัน
เหตุการณ์เหตุการณ์เหตุการณ์คือวัตถุที่ฟัง!
ก่อนอื่นให้ดูที่จอภาพรุ่นง่ายที่เขียนด้วยตัวเอง
เวอร์ชันง่าย:
มีแหล่งเหตุการณ์ผู้ฟังและชั้นทดสอบ
เหตุการณ์จะถูกนำไปใช้ในเวอร์ชันเต็มถัดไป
ขั้นตอนการพัฒนา:
ขั้นตอนที่ 1: ใช้คนในชั้นเรียนที่ต้องรับฟัง
ขั้นตอนที่ 2: ใช้อินเทอร์เฟซการฟัง IpersonRunListener
ขั้นตอนที่ 3: ในชั้นเรียนบุคคลให้หนึ่งวิธี (หรือหลายฉันมี 2 วิธีที่นี่) สำหรับการลงทะเบียนคลาส ipersonRunlistener เช่น addbefore และ addafter
ขั้นตอนที่ 4: อินสแตนซ์ของคลาส ipersonrunlistener จะต้องได้รับการดูแลในชั้นเรียนบุคคล
ขั้นตอนที่ 5: เมื่อโทรหาบุคคลนั้นใช้วิธีการตรวจสอบว่า ipersonrunlistener นั้นเป็นโมฆะหรือไม่และถ้าไม่ใช่โมฆะให้เรียกวิธีการต่อสู้หรือไม่
ขั้นตอนที่ 6: ในชั้นเรียนสาธิตคนอินสแตนซ์และลงทะเบียนผู้ฟัง
บุคคล:
แพ็คเกจ cn.hncu.designpattern1; บุคคลระดับสาธารณะ {ชื่อสตริงส่วนตัว; IpersonRunListener ส่วนตัว 1; IpersonRunListener ส่วนตัว 2; บุคคลสาธารณะ (ชื่อสตริง) {super (); this.name = ชื่อ; } โมฆะสาธารณะ Run () {ถ้า (Listener1! = null) {Listener1.fighting (); } system.out.println (ชื่อ+"เรียกใช้ ... "); if (listener2! = null) {listener2.fighting (); }} โมฆะสาธารณะ addbefore (ผู้ฟัง ipersonRunlistener) {this.listener1 = ผู้ฟัง; } โมฆะสาธารณะ addafter (ipersonRunlistener Listener) {this.listener2 = ผู้ฟัง; }} อินเตอร์เฟส ipersonrunlistener {public void fighting ();}การสาธิต
แพ็คเกจ cn.hncu.designpattern1; การสาธิตคลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {บุคคลบุคคล = บุคคลใหม่ ("จางซาน"); ipersonRunliStener Listener = ใหม่ ipersonRunlistener () {@Override โมฆะสาธารณะการต่อสู้ () {// มีหลายสิ่งที่คุณสามารถทำได้ที่นี่ไม่เพียง แต่ส่งออก // อย่างไรก็ตามเนื่องจากคุณยังไม่ได้เขียนวัตถุเหตุการณ์คุณยังไม่สามารถรับ System.out.println ( - person.addbefore (ผู้ฟัง); a = ใหม่ a (); person.addafter (a); person.run (); }} คลาส A ใช้ ipersonrunlistener {@Override public void fighting () {// มีหลายสิ่งที่คุณสามารถทำได้ที่นี่ไม่เพียง แต่เอาท์พุท // อย่างไรก็ตามเนื่องจากคุณยังไม่ได้เขียนวัตถุเหตุการณ์คุณยังไม่สามารถรับ system.out.println เรียกโดยใคร -เอาท์พุท:
เพิ่มแหล่งเหตุการณ์ในเวอร์ชันเต็ม:
ที่นี่วัตถุเหตุการณ์เหตุการณ์ได้ถูกเพิ่มเข้าไปในวัตถุก่อนหน้านี้ ถือว่าเป็นเวอร์ชันเต็ม
ขั้นตอนการพัฒนา:
ขั้นตอนที่ 1: ดำเนินการต่อเพื่อเพิ่มคลาส Personevent ตามหน้าก่อนหน้า (โปรดทราบว่าฉันบอกว่ามันเป็นคลาสไม่ใช่อินเทอร์เฟซ) ซึ่งเป็นตัวแทนของวัตถุเหตุการณ์
ขั้นตอนที่ 2: เพิ่มแอตทริบิวต์บุคคลลงในวัตถุ PersonEvent เพื่อระบุวัตถุแหล่งที่มาของเหตุการณ์
ขั้นตอนที่ 3: ปรับเปลี่ยนวิธีการต่อสู้ของอินเทอร์เฟซ PersonListener และปล่อยให้มันได้รับพารามิเตอร์ PersonEvent
ขั้นตอนที่ 4: ในวิธีการดำเนินการคลาสบุคคลหากมีการพิจารณาว่าทรัพย์สินของบุคคลที่ไม่ว่างเปล่าวิธีการต่อสู้จะเรียกว่าบุคคลนั้นเป็นอินสแตนซ์และวิธีการต่อสู้จะถูกส่งผ่านไปยังวิธีการต่อสู้
ขั้นตอนที่ 5: ในวิธีการหลักทดสอบว่ามันเป็นวัตถุเดียวกันผ่านวิธีการ GetSource ของ PersonEvent หรือไม่
person.java
แพ็คเกจ cn.hncu.designpattern2; บุคคลระดับสาธารณะ {ชื่อสตริงส่วนตัว; ผู้ฟัง ipersonrunlistener ส่วนตัว; บุคคลสาธารณะ (ชื่อสตริง) {super (); this.name = ชื่อ; } โมฆะสาธารณะเรียกใช้ () {system.out.println (ชื่อ+"เริ่มทำงาน ... "); if (ผู้ฟัง! = null) {listener.fighting (ใหม่ PersoneVent (นี้)); }} โมฆะสาธารณะ AddPersonListener (ผู้ฟัง ipersonRunlistener) {this.listener = ผู้ฟัง; } สตริงสาธารณะ getName () {ชื่อคืน; } @Override สตริงสาธารณะ toString () {return "person [name =" + name + ", listener =" + listener + "]"; }} อินเตอร์เฟส ipersonrunlistener {การต่อสู้กับโมฆะสาธารณะ บุคคลสาธารณะ (บุคคล p) {this.p = p; } สตริงสาธารณะ getName () {return p.getName (); } วัตถุสาธารณะ getSource () {return p; }} // เรายังสามารถเขียนคลาสพื้นฐานที่ช่วยให้เราใช้อินเตอร์เฟส // มันเขียนเทมเพลตทั่วไปของเรา หากเราสืบทอดคลาสนี้เราสามารถหยุดเขียนได้ // หากมีฟังก์ชั่นที่แตกต่างกันเราจะเขียนมันเองเพื่อแทนที่คลาสนี้เริ่มต้นคลาสนี้ catlistener ใช้ ipersonrunlistener {@Override โมฆะสาธารณะการต่อสู้ (PersonEvent PE) {System.out.println ("การกระทำเริ่มต้น ... "); -demo.java
แพ็คเกจ cn.hncu.designpattern2; การสาธิตคลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {บุคคล p1 = บุคคลใหม่ ("จางซาน"); บุคคล P2 = คนใหม่ ("แจ็ค"); IpersonRunliStener Listener = ใหม่ ipersonRunListener () {@Override โมฆะสาธารณะการต่อสู้ (PersonEvent PE) {System.out.println (pe.getSource ()+"มันถูกเรียกใช้ ... "); if (pe.getName (). Equals ("Zhang San")) {System.out.println (pe.getName ()+"วิ่งไปยังสถานที่แรก ... "); - P1.AddPersonListener (ผู้ฟัง); P2.addpersonListener (ผู้ฟัง); p1.run (); p2.run (); บุคคล P3 = บุคคลใหม่ ("Li Si"); P3.AddPersonListener (ใหม่ defaultCatListener ()); p3.run (); -ผลการสาธิต:
นี่คือหลักการพื้นฐาน หากคุณเปลี่ยนผลลัพธ์ของเหตุการณ์ในการกระทำที่คุณต้องการคุณสามารถตระหนักถึงฟังก์ชั่นที่คุณต้องการ เพิ่มผู้ฟังและคุณสามารถโทรหาวิธีที่คุณต้องการโทรมาก่อนหรือหลังวิธีการเรียกใช้และทำแอ็คชั่นที่คุณต้องการทำ!
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น