【ข้อความ】
1. คำจำกัดความของรูปแบบผู้สังเกตการณ์:
เพียงแค่ใส่รูปแบบผู้สังเกตการณ์กำหนดการพึ่งพาแบบหนึ่งต่อหลายคนทำให้วัตถุผู้สังเกตการณ์หนึ่งวัตถุขึ้นไปฟังวัตถุหัวข้อ ด้วยวิธีนี้เมื่อการเปลี่ยนแปลงสถานะที่สังเกตได้ผู้สังเกตการณ์ที่เกี่ยวข้องจะต้องได้รับการแจ้งเตือนเพื่อให้วัตถุผู้สังเกตการณ์เหล่านี้สามารถอัปเดตโดยอัตโนมัติ ตัวอย่างเช่น: กลไกการประมวลผลเหตุการณ์ใน GUI ใช้โหมดผู้สังเกตการณ์
2. การใช้งานโหมดผู้สังเกตการณ์:
หัวเรื่อง (อินเทอร์เฟซวัตถุที่จะสังเกต): ระบุอินเทอร์เฟซแบบครบวงจรของ concretesUbject; แต่ละวิชาสามารถมีผู้สังเกตการณ์หลายคน ConcretesUbject (วัตถุที่สังเกตได้เฉพาะ): เก็บรักษารายการการอ้างอิงไปยังผู้สังเกตการณ์เฉพาะทั้งหมด; เมื่อสถานะเปลี่ยนแปลงการแจ้งเตือนจะถูกส่งไปยังผู้สังเกตการณ์ที่ลงทะเบียนทั้งหมด Observer (ผู้สังเกตการณ์อินเทอร์เฟซ): ระบุอินเทอร์เฟซแบบครบวงจรของคอนกรีตบอสเวอร์เวอร์; กำหนดวิธีการอัปเดต () ซึ่งจะถูกเรียกเมื่อสถานะของวัตถุที่สังเกตเห็นการเปลี่ยนแปลง Concreteobserver: ยังคงอ้างอิงถึง ConcretesUbject; สถานะเฉพาะถูกซิงโครไนซ์กับคอนกรีต ใช้อินเทอร์เฟซ Observer, ฟังก์ชั่นของวิธีการอัปเดต (): เมื่อตรวจพบการเปลี่ยนแปลงในหัวเรื่องแล้วข้อมูลจะได้รับการอัปเดต
ไดอะแกรมอธิบายดังนี้:
หมายเหตุ: มีชุดในชั้นเรียนที่สังเกตเพื่อรักษาผู้สังเกตการณ์ทั้งหมด
3. ให้ตัวอย่าง:
[Scheme 1]: กำหนดอินเทอร์เฟซหรือคลาสด้วยตัวเองเพื่อใช้รูปแบบผู้สังเกตการณ์
ขั้นตอนมีดังนี้:
(1) กำหนดอินเทอร์เฟซที่ผู้สังเกตการณ์ครอบครอง:
แพ็คเกจ com.vince.observer; อินเทอร์เฟซสาธารณะที่สังเกตได้ {// ลงทะเบียนเป็นผู้สังเกตการณ์โมฆะสาธารณะ registerobserver (Observer Observer); // ยกเลิกโมฆะสาธารณะผู้สังเกตการณ์ RemoveObserver (Observer Observer); // แจ้งผู้สังเกตการณ์ทั้งหมดให้อัปเดตข้อมูลโมฆะสาธารณะ NotifyobServers ();}(2) กำหนดผู้สังเกตการณ์เฉพาะ: ถ้วย
แพ็คเกจ com.vince.observer; นำเข้า java.util.vector; ถ้วยคลาสสาธารณะใช้งานได้ที่สังเกตได้ {// รายการวัตถุผู้สังเกตการณ์ที่ดูแลโดยเวกเตอร์เอกชนผู้สังเกตการณ์ <Ebserver> เวกเตอร์ = เวกเตอร์ใหม่ <ผู้สังเกตการณ์> (); ราคาลอยตัวส่วนตัว ถ้วยสาธารณะ (ราคาลอย) {this.price = ราคา; } public float getPrice () {ราคาคืน; } โมฆะสาธารณะ setPrice (ราคาลอย) {// แจ้งผู้สังเกตการณ์ทั้งหมดเมื่อแก้ไขราคานี้ราคา = ราคา; NotifyobServers (); } @Override โมฆะสาธารณะ registerobserver (Observer Observer) {// ลงทะเบียนผู้สังเกตการณ์ Vector.add (Observer); } @Override โมฆะสาธารณะ removeObserver (Observer Observer) {// ยกเลิกผู้สังเกตการณ์ vector.remove (ผู้สังเกตการณ์); } @Override โมฆะสาธารณะ NotifyObServers () {// ดำเนินการแจ้งเตือนวัตถุผู้สังเกตการณ์ทั้งหมดสำหรับ (Observer Observer: Vector) {observer.update (ราคา); -(3) กำหนดอินเทอร์เฟซทั่วไปที่ผู้สังเกตการณ์มี: (อัปเดตข้อมูลแน่นอนว่าผลลัพธ์สุดท้ายคือการดำเนินการกับผู้สังเกตการณ์)
แพ็คเกจ com.vince.observer; ผู้สังเกตการณ์อินเตอร์เฟสสาธารณะ {อัพเดทโมฆะสาธารณะ (ราคาลอย); 5}(4) กำหนดวัตถุผู้สังเกตการณ์เฉพาะ:
แพ็คเกจ com.vince.observer; บุคคลระดับสาธารณะใช้ผู้สังเกตการณ์ {ชื่อสตริงส่วนตัว; บุคคลสาธารณะ (ชื่อสตริง) {this.name = name; } @Override การอัปเดตโมฆะสาธารณะ (ราคาลอย) {System.out.println (ชื่อ+"ราคาของถ้วยที่คุณกำลังติดตามได้รับการอัปเดตเป็น:"+ราคา); -(5) การทดสอบ:
แพ็คเกจ com.vince.observer; การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// สร้าง Observer Object Cup Doll = New Cup (3000); // สร้างวัตถุผู้สังเกตการณ์สองคนบุคคล P1 = บุคคลใหม่ ("ชีวิต 1"); บุคคล P2 = บุคคลใหม่ ("ชีวิต 2"); // ลงทะเบียนเป็นตุ๊กตาผู้สังเกตการณ์ Registerobserver (P1); Doll.registerobserver (P2); System.out.println ("รอบแรกของการโปรโมต:"); Doll.SetPrice (2698); // การเปลี่ยนแปลงราคา System.out.println ("โปรโมชั่นรอบที่สอง:"); Doll.SetPrice (2299); // System.out.println ("โปรโมชั่นรอบที่สอง:"); Doll.SetPrice (1998); Doll.removeobserver (P2); // ลบ Life 2 System.out.println ("โปรโมชั่นรอบที่สี่:"); Doll.setPrice (1098); -หลังจากทำงานแล้วผลลัพธ์จะแสดงดังนี้:
[Scheme 2]: เรียก JDK API โดยตรงเพื่อใช้งาน
ขั้นตอนมีดังนี้:
(1) ใช้วัตถุผู้สังเกตการณ์เฉพาะโดยสืบทอดคลาสที่สังเกตได้:
แพ็คเกจ com.vince.observer2; นำเข้า java.util.observable; ถ้วยระดับสาธารณะขยายที่สังเกตได้ {ราคาลอยตัวส่วนตัว; ถ้วยสาธารณะ (ราคาลอย) {this.price = ราคา; } public float getPrice () {ราคาคืน; } โมฆะสาธารณะ setPrice (ราคาลอย) {this.price = ราคา; this.setchanged (); // การแจ้งเตือนข้อมูลได้เปลี่ยนสิ่งนี้ notifyobservers (); -(2) ใช้วัตถุผู้สังเกตการณ์เฉพาะโดยใช้อินเตอร์เฟส java.util.observer:
แพ็คเกจ com.vince.observer2; นำเข้า java.util.observable; นำเข้า java.util.observer; บุคคลระดับสาธารณะใช้ผู้สังเกตการณ์ {ชื่อสตริงส่วนตัว; บุคคลสาธารณะ (ชื่อสตริง) {this.name = name; } @Override การอัปเดตโมฆะสาธารณะ (สามารถสังเกตได้ o, Object arg) {ถ้า (O อินสแตนซ์ของถ้วย) {ถ้วยถ้วย = (ถ้วย) o; System.out.println (ชื่อ+"ราคาของถ้วยที่คุณกำลังติดตามได้รับการอัปเดตเป็น:"+cup.getPrice ()); -(3) การทดสอบ:
แพ็คเกจ com.vince.observer2; การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ถ้วยถ้วย = ถ้วยใหม่ (3000); บุคคล P1 = คนใหม่ ("ชีวิต 1"); บุคคล P2 = บุคคลใหม่ ("ชีวิต 2"); Cup.Addobserver (P1); Cup.Addobserver (P2); System.out.println ("รอบแรกของโปรโมชั่น"); Cup.SetPrice (2988); System.out.println ("รอบที่สองของโปรโมชั่น"); Cup.SetPrice (2698); Cup.DeleteObserver (P2); System.out.println ("รอบที่สามของโปรโมชั่น"); Cup.SetPrice (1998); -หลังจากทำงานแล้วผลลัพธ์มีดังนี้:
【เอกสารโครงการ】
ลิงค์: http://xiazai.vevb.com/201609/yuanma/javaseguancha(vevb.com).rar
4. สรุป: (บทบาทของโหมดผู้สังเกตการณ์)
รูปแบบผู้สังเกตการณ์สร้างการมีเพศสัมพันธ์แบบนามธรรมระหว่างผู้สังเกตการณ์และผู้สังเกตการณ์ ตัวละครผู้สังเกตการณ์ทั้งหมดรู้ว่าเป็นเพียงรายการเฉพาะของผู้สังเกตการณ์
เนื่องจากผู้สังเกตการณ์และผู้สังเกตการณ์ไม่ได้อยู่ด้วยกันอย่างใกล้ชิดพวกเขาจึงสามารถอยู่ในระดับที่แตกต่างกันของสิ่งที่เป็นนามธรรม หากทั้งผู้สังเกตการณ์และผู้สังเกตการณ์ถูกโยนเข้าด้วยกันวัตถุจะต้องข้ามระดับของสิ่งที่เป็นนามธรรมและการเป็นรูปธรรม
โหมดผู้สังเกตการณ์รองรับการสื่อสารออกอากาศ ผู้สังเกตการณ์จะออกหนังสือแจ้งให้ผู้สังเกตการณ์ที่ลงทะเบียนทั้งหมด
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น