รูปแบบการสังเกตการณ์
เมื่อมีความสัมพันธ์มากระหว่างวัตถุที่ใช้รูปแบบการสังเกตการณ์ (Observer รูปแบบ) ตัวอย่างเช่นเมื่อวัตถุมีการแก้ไขก็จะแจ้งให้วัตถุขึ้นโดยอัตโนมัติ รูปแบบการสังเกตการณ์เป็นรูปแบบพฤติกรรม
การแนะนำ
เจตนา: กำหนดอ้างอิงระหว่างวัตถุหนึ่งต่อหลายคนเมื่อรัฐของวัตถุที่มีการเปลี่ยนแปลงวัตถุทั้งหมดที่ขึ้นอยู่กับมันได้รับการแจ้งเตือนและการปรับปรุงโดยอัตโนมัติ
เป็นหลักในการแก้ปัญหา: สถานะของการแจ้งเตือนการเปลี่ยนแปลงวัตถุการแก้ไขปัญหาของวัตถุอื่น ๆ แต่ยังคำนึงถึงความสะดวกในการใช้งานและการมีเพศสัมพันธ์ต่ำให้ความมั่นใจในระดับสูงของการทำงานร่วมกัน
เมื่อใช้: วัตถุ (วัตถุเป้าหมาย) เปลี่ยนสถานะวัตถุทั้งหมดที่อ้างถึง (วัตถุสังเกต) จะได้รับการแจ้งเตือนการแจ้งเตือนการออกอากาศ
วิธีการแก้ไข: การใช้เทคโนโลยีเชิงวัตถุพึ่งพานี้สามารถลดลง
รหัสสำคัญ: ระดับนามธรรมมี ArrayList เก็บไว้สังเกตการณ์
ตัวอย่างการใช้งาน: 1, เมื่อการประมูลขายทอดตลาดสังเกตราคาสูงสุดแล้วแจ้งให้ผู้ประมูลรายอื่นเสนอราคา2 เดินทางไปยังตะวันตกภายใน Wukong คำขอยอมแพ้เด็กแดงพระพุทธรูปพระพุทธน้ำทะลักชั้นของสะกิดเต่าเก่าเต่านี้จะสังเกตเขาสังเกตเห็นว่าการกระทำของพระพุทธรูปรดน้ำ
ข้อดี: 1, ผู้สังเกตการณ์และสังเกตเห็นเป็นนามธรรมคู่2 เพื่อสร้างกลไกการทริกเกอร์
ข้อเสีย: 1 ถ้าวัตถุสังเกตที่มีจำนวนมากของผู้สังเกตการณ์ตรงและทางอ้อมก็จะแจ้งให้ผู้สังเกตการณ์ทั้งหมดจะใช้จ่ายเป็นจำนวนมากเวลา2 หากมีการพึ่งพาวงกลมระหว่างสังเกตการณ์และเป้าหมายที่สังเกตสังเกตเป้าหมายจะเรียกสายที่จะหมุนเวียนระหว่างพวกเขาอาจทำให้ระบบที่ผิดพลาด 3 โหมดผู้สังเกตการณ์มีกลไกที่จะให้ผู้ชมได้รู้ว่าผู้ชมที่เป็นวิธีการที่มีการเปลี่ยนแปลงที่สังเกตไม่ แต่เพียงรู้ว่าการเปลี่ยนแปลงเป้าหมายการสังเกต
สถานการณ์การใช้งาน: 1, วิธีการหลายชั้นย่อยทั่วไปและตรรกะเดียวกัน2 สิ่งที่สำคัญวิธีการที่ซับซ้อนถือได้ว่าเป็นวิธีการที่แม่แบบ
หมายเหตุ: 1, JAVA แล้วมีการเรียนการสนับสนุนโหมดการสังเกตการณ์2 เพื่อหลีกเลี่ยงการอ้างอิงแบบวงกลม 3 ถ้าสั่งการดำเนินการที่ผู้ชมสามารถทำให้เกิดความผิดพลาดของระบบที่ติดอยู่โดยทั่วไปใช้โหมดไม่ตรงกัน
การสำนึก
รูปแบบการสังเกตการณ์โดยใช้สามชั้นเรียนเรื่องสังเกตการณ์และลูกค้า เรื่องไปยังวัตถุที่ลูกค้าที่มีวัตถุและผู้สังเกตการณ์เป็นวิธีการที่ถูกผูกไว้สังเกตการณ์ผูกโซลูชั่นไคลเอ็นต์จากวัตถุเราสร้างชั้นเรื่องสังเกตการณ์ระดับนามธรรมและขยายชั้นสังเกตการณ์นามธรรมชั้นนิติบุคคล
ObserverPatternDemo เรียนสาธิตของเราโดยใช้วัตถุระดับและหน่วยงานเรื่องแสดงให้เห็นถึงรูปแบบการสังเกตการณ์
ขั้นตอนที่ 1
สร้างหมวดหมู่เรื่อง
Subject.java
นำเข้า java.util.ArrayList; นำเข้า java.util.List; เรียนสาธารณะเรื่อง { รายการส่วนตัว <สังเกตการณ์> สังเกตการณ์ = ArrayList ใหม่ <สังเกตการณ์> (); รัฐ int เอกชน int สาธารณะ getState () { กลับรัฐ } โมฆะสาธารณะ setState (รัฐ int) { this.state = รัฐ notifyAllObservers (); } โมฆะสาธารณะแนบ (ผู้สังเกตสังเกต) { observers.add (ผู้สังเกต); } notifyAllObservers โมฆะสาธารณะ () { สำหรับ (Observer สังเกตการณ์: ผู้สังเกตการณ์) { observer.update (); } } }
ขั้นตอนที่ 2
สร้างคลาสสังเกตการณ์
Observer.java
สังเกตการณ์ระดับนามธรรมสาธารณะ { การป้องกันเรื่องเรื่อง; ประชาชนปรับปรุงโมฆะนามธรรม (); }
ขั้นตอนที่ 3
สร้างคลาสนิติบุคคลสังเกตการณ์
BinaryObserver.java
เรียนสาธารณะ BinaryObserver ขยายสังเกตการณ์ { ประชาชน BinaryObserver (เรื่องเรื่อง) { this.subject = เรื่อง; this.subject.attach (นี้); } @Override ปรับปรุงโมฆะสาธารณะ () { System.out.println ( "สตริง Binary" + Integer.toBinaryString (subject.getState ())); } }
OctalObserver.java
เรียนสาธารณะ OctalObserver ขยายสังเกตการณ์ { ประชาชน OctalObserver (เรื่องเรื่อง) { this.subject = เรื่อง; this.subject.attach (นี้); } @Override ปรับปรุงโมฆะสาธารณะ () { System.out.println ( "Octal สตริง" + Integer.toOctalString (subject.getState ())); } }
HexaObserver.java
เรียนสาธารณะ HexaObserver ขยายสังเกตการณ์ { HexaObserver สาธารณะ (เรื่องเรื่อง) { this.subject = เรื่อง; this.subject.attach (นี้); } @Override ปรับปรุงโมฆะสาธารณะ () { System.out.println ( "Hex สตริง" + Integer.toHexString (subject.getState ()) .toUpperCase ()); } }
ขั้นตอนที่ 4
ใช้เรื่องและสังเกตการณ์วัตถุนิติบุคคล
ObserverPatternDemo.java
ObserverPatternDemo คลาสที่สาธารณะ { ประชาชนเป็นโมฆะคง main (String args []) { เรื่องเรื่อง = เรื่องใหม่ (); HexaObserver ใหม่ (เรื่อง); ใหม่ OctalObserver (เรื่อง); ใหม่ BinaryObserver (เรื่อง); System.out.println ( "การเปลี่ยนแปลงครั้งแรกของรัฐ: 15"); subject.setState (15); System.out.println ( "การเปลี่ยนแปลงที่สองรัฐ: 10"); subject.setState (10); } }
ขั้นตอนที่ 5
ตรวจสอบการส่งออก
การเปลี่ยนแปลงครั้งแรกที่รัฐ: 15 Hex String: F String Octal: 17 สตริงไบนารี: 1111 การเปลี่ยนแปลงรัฐที่สอง: 10 Hex String: การ String Octal: 12 สตริงไบนารี: 1010