Latest web development tutorials

نمط مراقب

عندما تكون هناك العديد من العلاقات بين الأشياء، واستخدام نمط مراقب (خطة مراقب). على سبيل المثال، عندما يتم تعديل كائن، فإنه سوف يخطر الكائنات التابعة الخاصة به تلقائيا. نمط مراقب ينتمي إلى أنماط سلوكية.

مقدمة

القصد: تحديد التابعة لها بين الأشياء من واحد لكثير، عند تغيير حالة كائن، يتم إخطار كافة الكائنات التي تعتمد عليها وتحديثها تلقائيا.

أساسا لحل: حالة تغيير الإعلام كائن لمشاكل غيرها من الأشياء، ولكن مع الأخذ في الاعتبار أيضا سهولة الاستخدام واقتران منخفضة، وضمان درجة عالية من التعاون.

متى تستخدم: ل(الكائن الهدف) الكائن يتغير الدولة، وسيتم إخطار جميع الكائنات التابعة (كائنات مراقب)، إخطارا البث.

كيفية إصلاح: استخدام التكنولوجيا وجوه المنحى، وهذا الاعتماد يمكن أن تضعف.

رمز المفتاح: فئة مجردة لديهم ArrayList المخزنة المراقبين.

أمثلة التطبيق: 1، عندما المزاد، بالدراسة مراقبة أعلى سعر، ومن ثم إخطار مقدمي العطاءات الآخرين محاولة.2، رحلة إلى الغرب داخل وو كونغ طلب الاستسلام الأحمر الصبي بوذا، امتد بوذا الماء على الأرض لاستفزاز السلحفاة من العمر، وهذا هو سلحفاة المراقب، لاحظ أن عمل بوذا الري.

المزايا: 1، المراقب والمراقب ومجردة جانب.2، لإنشاء آلية الزناد.

العيوب: 1، إذا كان الكائن الملحوظ لديها الكثير من المراقبين المباشر وغير المباشر، وسوف تخطر جميع المراقبين هي لقضاء الكثير من الوقت.2، إذا كان هناك تبعية دائرية بين الراصد والهدف لاحظ، لاحظ الهدف سوف يؤدي دعوات لتعميم بينهما، قد يتسبب في النظام لتحطم الطائرة. 3، ووضع مراقب لا توجد آلية للسماح للمشاهد معرفة الجمهور هو كيف يمكن للتغييرات ملحوظة، ولكن يعرف تماما أن التغييرات الهدف الملاحظة.

سيناريوهات الاستخدام: 1، طريقة شائعة متعددة الفئة الفرعية، ونفس المنطق.2 يمكن اعتبار والأساليب الهامة والمعقدة كوسيلة القالب.

ملاحظة: 1، JAVA لديها بالفعل الطبقات دعم وضع مراقب.2، لتجنب المراجع الدائرية. 3، إذا كان النظام من التنفيذ، يمكن للمشاهد أن يسبب أخطاء النظام عالقة، عادة استخدام وضع غير متزامن.

تحقيق

نمط مراقب باستخدام ثلاث فئات الموضوع، المراقب والعميل. تخضع لكائن العميل مع هدف والمراقب هو أساليب المراقبة المربوطة مرتبطة حلول العميل من الأشياء. ونحن إنشاءفئة الموضوع،المراقب فئة مجردة وتوسيع الطبقةالمراقبمجردة من الدرجة الكيان.

ObserverPatternDemo، والطبقاتمظاهرة لدينا باستخدام كائنات فئة والكياناتالخاضعةللتدليل على نمط المراقب.

وUML مخطط نمط مراقب

خطوة 1

إنشاء فئة الموضوع.

Subject.java

استيراد java.util.ArrayList.
استيراد java.util.List.

فئة العمومي موضوع {
	
   قائمة خاصة <المراقب> المراقبين 
      = ArrayList جديد <المراقب> ()؛
   خاصة دولة كثافة العمليات.

   getState كثافة الجمهور () {
      عودة الدولة.
   }

   setState الفراغ الجمهور (ولاية كثافة العمليات) {
      this.state = الدولة.
      notifyAllObservers ()؛
   }

   الفراغ العام نعلق (مراقب مراقب) {
      observers.add (مراقب)؛		
   }

   notifyAllObservers الفراغ الجمهور () {
      ل(مراقب المراقب: مراقب) {
         observer.update ()؛
      }
   } 	
}

خطوة 2

إنشاء فئة المراقب.

Observer.java

فئة مجردة العامة المراقب {
   محمية الموضوع موضوع.
   تحديث الفراغ المجرد العام ()؛
}

خطوة 3

إنشاء فئة كيان مراقب.

BinaryObserver.java

الطبقة العامة BinaryObserver يمتد المراقب {

   الجمهور BinaryObserver (موضوع الموضوع) {
      this.subject = الموضوع؛
      this.subject.attach (هذا)؛
   }

   Override
   تحديث باطلة العامة () {
      System.out.println ( "سلسلة الثنائية:" 
      + Integer.toBinaryString (subject.getState ()))؛ 
   }
}

OctalObserver.java

الطبقة العامة OctalObserver يمتد المراقب {

   الجمهور OctalObserver (موضوع الموضوع) {
      this.subject = الموضوع؛
      this.subject.attach (هذا)؛
   }

   Override
   تحديث باطلة العامة () {
     System.out.println ( "أوكتال سلسلة:" 
     + Integer.toOctalString (subject.getState ()))؛ 
   }
}

HexaObserver.java

الطبقة العامة HexaObserver يمتد المراقب {

   HexaObserver الجمهور (موضوع موضوع) {
      this.subject = الموضوع؛
      this.subject.attach (هذا)؛
   }

   Override
   تحديث باطلة العامة () {
      System.out.println ( "عرافة سلسلة:" 
      + Integer.toHexString (subject.getState ()) .toUpperCase ())؛ 
   }
}

خطوة 4

استخدام الكائنات كيانالموضوعومراقب.

ObserverPatternDemo.java

الطبقة العامة ObserverPatternDemo {
   (وسائط سلسلة []) العامة ساكنة باطلة الرئيسية {
      موضوع يخضع = موضوع جديد ()؛

      HexaObserver جديد (الموضوع).
      جديد OctalObserver (الموضوع).
      جديد BinaryObserver (الموضوع).

      System.out.println ( "التغيير الأول الدولة: 15")؛	
      subject.setState (15)؛
      System.out.println ( "التغيير الثاني دولة: 10")؛	
      subject.setState (10)؛
   }
}

خطوة 5

تحقق من الانتاج.

تغيير الدولة الأول: 15
عرافة سلسلة: F
سلسلة ثماني: 17
سلسلة ثنائية: 1111
تغيير حالة الثاني: 10
عرافة سلسلة: A
سلسلة ثماني: 12
سلسلة ثنائية: 1010