【نص】
1. تعريف نمط المراقب:
ببساطة ، يعرّف نمط المراقب التبعية الواحدة ، مما يسمح لكائن مراقب واحد أو أكثر بالاستماع إلى كائن موضوع. وبهذه الطريقة ، عندما تتغير الحالة المرصودة ، يجب إخطار المراقب المقابل بحيث يمكن تحديث كائنات المراقب هذه تلقائيًا. على سبيل المثال: تعتمد آلية معالجة الأحداث في واجهة المستخدم الرسومية وضع المراقب.
2. تنفيذ وضع المراقب:
الموضوع (واجهة الكائن المراد ملاحظتها): يحدد الواجهة الموحدة للخرزات ؛ يمكن أن يكون لكل موضوع عدة مراقبين ؛ concretesubject (كائنات محددة ملحوظة): يحافظ على قائمة بالمراجع لجميع المراقبين المحددين ؛ عندما تتغير الحالة ، سيتم إرسال إشعار إلى جميع المراقبين المسجلين. المراقب (واجهة المراقب): يحدد الواجهة الموحدة لـ ConcreteObserver ؛ يحدد طريقة التحديث () ، والتي سيتم استدعاؤها عندما تتغير حالة الكائن المرصود. ConcreteObserver: يحافظ على إشارة إلى concretesubject ؛ تتم مزامنة الحالة المحددة مع concretesubject ؛ ينفذ واجهة المراقب ، وظيفة طريقة التحديث (): بمجرد اكتشاف التغيير في الموضوع ، سيتم تحديث المعلومات.
يوصف الرسم البياني على النحو التالي:
ملاحظة: هناك مجموعة في الفئة المرصودة للحفاظ على جميع المراقبين.
3. أعط أمثلة:
[المخطط 1]: حدد الواجهة أو الفصل لتنفيذ نمط المراقب.
الخطوات كما يلي:
(1) حدد الواجهة التي يمتلكها المراقب:
package com.vince.Observer ؛ واجهة عامة يمكن ملاحظتها {// register كمراقب Void registerObserver (Observer Observer) ؛ // قم بإلغاء Observer public void removeObserver (Observer Observer) ؛ // إخطار جميع المراقبين لتحديث المعلومات الفراغ العام الإخطار () ؛}(2) تحديد المراقب المحدد: كوب
package com.vince.Observer ؛ import java.util.vector ؛ Class Cup Public Passable يمكن ملاحظته {// قائمة كائنات المراقب التي يحتفظ بها ناقل Observer الخاص <Soncerver> Vector = New Vector <Sborver> () ؛ سعر التعويم الخاص ؛ كأس عام (سعر تعويم) {this.price = price ؛ } getPrice GetPrice () {سعر الإرجاع ؛ } public void setPrice (سعر التعويم) {// إخطار جميع المراقبين عند تعديل السعر this.price = price ؛ eletiplesoBservers () ؛ } Override public void registerObserver (Observer Observer) {// Record Observer Vector.add (Observer) ؛ } Override public void removeObserver (Observer Observer) {// Cancel Observer Vector.remove (Observer) ؛ } Override public void notifyObservers () {// تنفيذ إخطار جميع كائنات المراقب لـ (Observer Observer: Vector) {observer.update (price) ؛ }}}(3) حدد الواجهة المشتركة التي يمتلكها المراقب: (تحديث البيانات هو بالطبع ، يتم تنفيذ النتيجة النهائية مع المراقب)
package com.vince.observer ؛ public interface observer {public void update (float price) ؛ 5}(4) تحديد كائنات مراقب محددة:
Package com.vince.Observer ؛ Public Class Proferments ينفذ Observer {اسم السلسلة الخاصة ؛ الشخص العام (اسم السلسلة) {this.name = name ؛ } Override public void update (float price) {system.out.println (name+"تم تحديث سعر الكأس الذي تتبعه إلى:"+السعر) ؛ }}(5) الاختبار:
package com.vince.observer ؛ اختبار الطبقة العامة {public static void main (string [] args) {// إنشاء دمية كائن كائن مراقب = كوب جديد (3000) ؛ // إنشاء اثنين من كائنات المراقب p1 = شخص جديد ("الحياة 1") ؛ الشخص p2 = شخص جديد ("الحياة 2") ؛ // register as a observer doll.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) ؛ // إزالة الحياة 2 system.out.println ("الترويج للجولة الرابعة:") ؛ Doll.SetPrice (1098) ؛ }}بعد الجري ، يتم عرض النتائج على النحو التالي:
[المخطط 2]: اتصل مباشرةً على API JDK لتنفيذها.
الخطوات كما يلي:
(1) تنفيذ كائن المراقب المحدد عن طريق وراثة الفئة الملحوظة:
package com.vince.observer2 ؛ import java.util.Observable ؛ يمتد كأس الطبقة العامة إلى {Private Float Price ؛ كأس عام (سعر تعويم) {this.price = price ؛ } getPrice GetPrice () {سعر الإرجاع ؛ } public void setPrice (سعر التعويم) {this.price = price ؛ this.setchanged () ؛ // الإخطار ، لقد غيرت البيانات هذا. notifyobservers () ؛ }}(2) تنفيذ كائنات مراقب محددة من خلال تنفيذ واجهة java.util.ouldserver:
package com.vince.Observer2 ؛ import java.util.Observable ؛ import java.util.observer ؛ public class proferements observer {private string name ؛ الشخص العام (اسم السلسلة) {this.name = name ؛ } Override public void update (يمكن ملاحظته O ، Object Arg) {if (o eastealof cup) {cup cup = (cup) o ؛ تم تحديث system.out.println (name+"سعر الكأس التي تتابعها إلى:"+cup.getPrice ()) ؛ }}}(3) الاختبار:
package com.vince.observer2 ؛ اختبار الطبقة العامة {public static void main (string [] args) {cup cup = new cup (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 أكثر.