บทความนี้อธิบายถึงการใช้โหมดผู้สังเกตการณ์เพื่อใช้ฟังก์ชั่นการเตือนอุณหภูมิสูงของสำนักอุตุนิยมวิทยา แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
1. คำจำกัดความรูปแบบ
โหมดผู้สังเกตการณ์หรือที่เรียกว่าโหมดเผยแพร่/สมัครสมาชิก รูปแบบผู้สังเกตการณ์กำหนดการพึ่งพาแบบหนึ่งถึงหลายคนระหว่างวัตถุ เมื่อสถานะของวัตถุเปลี่ยนแปลงวัตถุทั้งหมดที่ขึ้นอยู่กับมันจะได้รับแจ้งและอัปเดตโดยอัตโนมัติ
2. ตัวอย่างของแบบจำลอง
1 การวิเคราะห์รูปแบบ
เรายืมคำเตือนอุณหภูมิสูงของสำนักอุตุนิยมวิทยาเพื่อแสดงให้เห็นถึงโมเดลนี้
2 รูปแบบผู้สังเกตการณ์ไดอะแกรมคลาสคงที่
3 ตัวอย่างรหัส
3.1 Observer Interface-iobserver
แพ็คเกจ com.demo.observer; นำเข้า com.demo.subject.isubject;/** * ผู้สังเกต
3.2 หัวข้ออินเทอร์เฟซ-isubject
แพ็คเกจ com.demo.subject; นำเข้า com.demo.observer.iobserver;/** * หัวข้ออินเทอร์เฟซ (ผู้สังเกตการณ์) * * @author * */อินเตอร์เฟสสาธารณะ isubject {/** * เพิ่ม observer * * @param observer * @return / ** * ลบผู้สังเกตการณ์ * * @param observer * @return */ บูลีนสาธารณะลบ (iobserver observer); / *** แจ้งผู้สังเกตการณ์ทั้งหมดให้อัปเดตข้อมูล*/ โมฆะสาธารณะ NotifyAllobServer (); / ** * ตั้งค่าอุณหภูมิ * * @param อุณหภูมิ */ โมฆะสาธารณะ settemperature (อุณหภูมิลอย); / ** * รับคำเตือนอุณหภูมิ * * @return */ อุณหภูมิสตริงสาธารณะ ();};}3.3 การดำเนินการตามหัวข้อในหัวข้อเฉพาะ
แพ็คเกจ com.demo.subject; นำเข้า java.util.iterator; นำเข้า java.util.vector; นำเข้า com.demo.observer.iobserver;/** * คลาสการใช้งานธีม (ผู้สังเกตการณ์) * * @author * */คลาสสาธารณะ วันติดต่อกัน * * (2) สัญญาณเตือนสีส้มอุณหภูมิสูง * * มาตรฐาน: อุณหภูมิสูงสุดจะสูงกว่า 37 ℃ภายใน 24 ชั่วโมง * * (iii) สัญญาณเตือนสีแดงอุณหภูมิสูง * * มาตรฐาน: อุณหภูมิสูงสุดจะสูงกว่า 40 ℃ภายใน 24 ชั่วโมง */ อุณหภูมิลอยตัวส่วนตัว; // ระดับการเตือนล่วงหน้าระดับสตริงส่วนตัว WarningLevel; // บันทึกรายการผู้สังเกตการณ์ส่วนตัวเวกเตอร์สุดท้าย <Iobserver> เวกเตอร์; / *** สร้างวิธีการเริ่มต้นรายการผู้สังเกตการณ์*/ เรื่องสาธารณะ () {vector = เวกเตอร์ใหม่ <iobserver> (); } / *** เพิ่ม Observer* / Public Boolean Add (iObserver Observer) {ถ้า (Observer! = null &&! vector.contains (Observer)) {return vector.add (Observer); } return false; } / *** ลบผู้สังเกตการณ์* / บูลีนสาธารณะลบ (ผู้สังเกตการณ์ iobserver) {return vector.remove (ผู้สังเกตการณ์); } / *** แจ้งผู้สังเกตการณ์ทั้งหมดให้อัปเดตข้อมูล* / โมฆะสาธารณะ NotifyAllobServer () {System.out.println ("============ แผนกอุตุนิยมวิทยาจะปล่อยอุณหภูมิสูง" (iterator.hasnext ()) {(iterator.next ()). อัปเดต (นี่);}} / *** วิธีการส่วนตัวตั้งค่าระดับการเตือนตามค่าอุณหภูมิและแจ้งให้ผู้สังเกตการณ์ทั้งหมด* / โมฆะส่วนตัวเรียกใช้ "สีเหลือง"; โมฆะสาธารณะ settemperature (อุณหภูมิลอย) {this.temperature = อุณหภูมิ;3.4 ผู้สังเกตการณ์ส่วนบุคคล
แพ็คเกจ com.demo.observer; นำเข้า com.demo.subject.isubject;/** * ผู้สังเกตการณ์ผู้ใช้รายบุคคล * @author * */personobserver ชั้นเรียนสาธารณะใช้ iobserver {การอัพเดตโมฆะสาธารณะ -3.5 รัฐบาลผู้สังเกตการณ์-รัฐบาล
แพ็คเกจ com.demo.observer; นำเข้า com.demo.subject.isubject;/** * ผู้สังเกตการณ์ผู้ใช้รัฐบาล * @author * */ชั้นเรียนสาธารณะรัฐบาลใช้ iobserver {การอัปเดตโมฆะสาธารณะ -3.6 บริษัท
แพ็คเกจ com.demo.observer; นำเข้า com.demo.subject.isubject;/** * องค์กรและสถาบันผู้สังเกตการณ์ผู้สังเกตการณ์ * @author * */บริษัท ชั้นเรียนสาธารณะ -
3.7 ให้ระบบเริ่มเรียกใช้ไคลเอนต์
แพ็คเกจ com.demo; นำเข้า java.util.random; นำเข้า com.demo.observer.companyobserver; นำเข้า com.demo.observer.governmentobserver; นำเข้า com.demo.observer.personobserver; @author * */ไคลเอนต์คลาสสาธารณะ {/** * @param args */โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// สร้างวัตถุหัวข้อ isubject subject = new subject (); // เพิ่มผู้สังเกตการณ์ขององค์กรและสถาบัน ADD (บริษัท ใหม่ ()); // เพิ่มผู้สังเกตการณ์ของรัฐบาลผู้ใช้ ADD (New Governmentobserver ()); // เพิ่มผู้สังเกตการณ์ของผู้ใช้แต่ละคน ADD (ใหม่ personobserver ()); สุ่มสุ่ม = ใหม่สุ่ม (); int i = 0; ในขณะที่ (++ i <10) {// ตั้งค่าอุณหภูมิแบบสุ่ม SETTEMPERATURE (สุ่ม NEXTINT (45)); -4 ผลการทำงาน
======== แผนกอุตุนิยมวิทยาออกสัญญาณเตือนอุณหภูมิสูงสีเหลือง! ======
องค์กรและสถาบันได้รับการเตือนอุณหภูมิสูง: อุณหภูมิ: 35.0
หน่วยงานรัฐบาลได้รับการเตือนอุณหภูมิสูง: อุณหภูมิ: 35.0
บุคคลได้รับการเตือนอุณหภูมิสูง: อุณหภูมิ: 35.0
======== แผนกอุตุนิยมวิทยาออกสัญญาณเตือนสีแดงสำหรับอุณหภูมิสูง! ======
องค์กรและสถาบันได้รับการเตือนอุณหภูมิสูง: อุณหภูมิ: 43.0
หน่วยงานรัฐบาลได้รับคำเตือนอุณหภูมิสูง: อุณหภูมิ: 43.0
บุคคลได้รับการเตือนอุณหภูมิสูง: อุณหภูมิ: 43.0
======== แผนกอุตุนิยมวิทยาออกสัญญาณเตือนสีส้มอุณหภูมิสูง! ======
องค์กรและสถาบันได้รับการเตือนอุณหภูมิสูง: อุณหภูมิ: 37.0
หน่วยงานรัฐบาลได้รับการเตือนอุณหภูมิสูง: อุณหภูมิ: 37.0
บุคคลได้รับการเตือนอุณหภูมิสูง: อุณหภูมิ: 37.0
3. หลักการออกแบบของรุ่นนี้
หลักการ 1 "ปิดปิด"
2 หลักการความรับผิดชอบเดี่ยว
3. หลักการของการผกผันการพึ่งพาอาศัยกัน
4. ใช้โอกาส
1 เมื่อโมเดลนามธรรมมีสองด้านซึ่งหนึ่งในนั้นขึ้นอยู่กับอีกรูปแบบหนึ่งและจำเป็นต้องถูกห่อหุ้มเป็นวัตถุอิสระและเปลี่ยนไปอย่างอิสระและมัลติเพล็กซ์ซึ่งกันและกัน
2 เมื่อการเปลี่ยนแปลงของวัตถุในระบบต้องเปลี่ยนเนื้อหาของวัตถุอื่นในเวลาเดียวกัน แต่คุณไม่ทราบว่าจะมีการเปลี่ยนแปลงวัตถุจำนวนเท่าใด
3 เมื่อการเปลี่ยนแปลงของวัตถุต้องได้รับแจ้งให้ทำการเปลี่ยนแปลงที่สอดคล้องกัน แต่ไม่สามารถกำหนดได้ว่าใครจะได้รับแจ้งวัตถุ
5. "ข้อมูลดึงข้อมูล" ไดอะแกรมคลาสคงที่
สิ่งที่เรียกว่า "การผลักดันข้อมูล" หมายความว่าเมื่อวัตถุที่สังเกตเห็นการเปลี่ยนแปลงข้อมูลที่เกี่ยวข้องจะถูกส่งผ่านไปยังผู้สังเกตการณ์ผ่านพารามิเตอร์ซึ่งเป็นผู้สังเกตการณ์ "ผลักดันข้อมูล" ไปยังผู้สังเกตการณ์ แผนภาพคลาสคงที่มีดังนี้:
6. "Data Data" ไดอะแกรมคลาสคงที่
สิ่งที่เรียกว่า "ข้อมูลดึง" วัตถุผู้สังเกตการณ์มีการอ้างอิงถึงอินสแตนซ์ของวัตถุที่ถูกสังเกต เมื่อวัตถุที่ถูกสังเกตเห็นการเปลี่ยนแปลงจะไม่มีข้อมูลใดส่งผ่านไปยังผู้สังเกตการณ์ ผู้สังเกตการณ์ได้รับข้อมูลที่เกี่ยวข้องอย่างแข็งขันตามการอ้างอิงของวัตถุที่ถูกสังเกต สิ่งนี้ทำให้ผู้สังเกตการณ์ "ดึงข้อมูล" อย่างแข็งขันจากวัตถุที่ถูกสังเกต แผนภาพคลาสคงที่มีดังนี้:
สำหรับเนื้อหาที่เกี่ยวข้องกับ Java ผู้อ่านที่สนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "บทนำและการสอนขั้นสูงเกี่ยวกับการเขียนโปรแกรมเชิงวัตถุ Java", "การสอนเกี่ยวกับโครงสร้างข้อมูล Java และอัลกอริทึม" สรุปการดำเนินงานของ Java
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน