يعد وضع Observer (يسمى أحيانًا وضع Publish-Subscribe أو وضع عرض النموذج أو وضع المستنير المصدر أو وضع الرقيق) نوعًا من وضع تصميم البرنامج. في هذا الوضع ، يدير كائن مستهدف جميع كائنات المراقب التي تعتمد عليه ويصدر الإخطارات بنشاط عند تغيير حالته. عادة ما يتم تحقيق ذلك عن طريق استدعاء أساليب كل مراقب. عادة ما يستخدم هذا النمط لتنفيذ أنظمة معالجة الأحداث.
وضع المراقب يفصل المراقب تمامًا عن الكائن المرصود. على سبيل المثال ، يمكن استخدام واجهة المستخدم كمراقب ، وبيانات العمل هي المراقب. تلاحظ واجهة المستخدم التغييرات في بيانات العمل. بعد اكتشاف التغييرات في البيانات ، سيتم عرضها على الواجهة. أحد مبادئ التصميم الموجهة للكائنات هو أن كل فئة في النظام ستركز على وظيفة واحدة ، وليس جوانب أخرى. الشخص يفعل شيئًا واحدًا فقط ويفعله جيدًا. يرسم وضع المراقب حدود واضحة بين الوحدات ، مما يؤدي إلى تحسين قابلية الصيانة وقابلية إعادة الاستخدام للتطبيق.
يحدد نمط تصميم المراقب التبعية الواحدة بين الكائنات بحيث عندما تتغير حالة الكائن ، يتم إخطار جميع الكائنات التي تعتمد عليه وتناقحها تلقائيًا.
طريقة التنفيذ:
هناك العديد من الطرق لتنفيذ نمط المراقب ، وفي الأساس ، يجب أن يحتوي النمط على دوران: المراقب والكائن الذي يتم ملاحظته. في المثال الآن ، فإن بيانات العمل هي الكائن الذي يتعين ملاحظته وواجهة المستخدم هي المراقب. هناك علاقة منطقية بين المراقب والمراقب. عندما يتغير المراقب ، سيراقب المراقب مثل هذه التغييرات ويستجيب وفقًا لذلك. إذا تم استخدام عملية المراقبة هذه بين واجهة المستخدم وبيانات العمل ، فيمكن التأكد من أن الحدود بين الواجهة والبيانات يتم رسمها. على افتراض أن احتياجات التطبيق تتغير ، يجب تعديل أداء الواجهة. يجب إعادة بناء واجهة المستخدم فقط ، ولا تحتاج بيانات العمل إلى التغيير.
1. المراقب
(المراقب) يسجل نفسه في هذا الموضوع ، ويقوم الكائن المرصود بتخزين المراقب في حاوية.
2. يجري ملاحظته
يحتوي الكائن الذي يتم ملاحظته على بعض التغيير (كما هو موضح في Somechange في الشكل) ، ويتم الحصول على جميع المراقبين المسجلين من الحاوية وإخطار مراقب التغيير.
3. إلغاء الملاحظة
يخبر المراقب المراقب بإلغاء الملاحظة ويزيل المراقب من الحاوية.
عندما يسجل المراقب نفسه في حاوية المراقب ، يجب ألا يسأل المراقب عن النوع المحدد للمراقب ، ولكن يجب أن يستخدم واجهة المراقب. هذه الميزة هي: على افتراض أن هناك مراقبين آخرين في البرنامج ، طالما يتم تنفيذ هذا المراقب أيضًا بواسطة الواجهة نفسها. يمكن للشخص الذي يتم ملاحظته أن يتوافق مع عدة مراقبين. عندما يتغير الشخص الذي يتم ملاحظته ، يمكنه إخطار جميع المراقبين واحدًا تلو الآخر. استنادًا إلى واجهات ، وليس تطبيقات محددة - وهذا يوفر مرونة أكبر للبرامج.
رمز العرض التوضيحي:
حدد الدور المجردة المراد ملاحظتها:
حزمة test.edu.mainrole ؛ استيراد java.util.arraylist ؛ الفئة التجريدية العامة Abray {private ArrayList <IobServer> list = new ArrayList <IobServer> () ؛ إضافة الفراغ العام (iobserver observer) {list.add (observer) ؛ } حذف الفراغ العام (iobserver observer) {list.remove (observer) ؛ } public void nodifyObservers (String NewState) {for (iobserver observer: list) {observer.update (newState) ؛ }}} الدور المرصود الفئة الفرعية:
حزمة test.edu.mainrole ؛ دور الطبقة العامة يمتد Absrole {Private String State ؛ السلسلة العامة getState () {Return State ؛ } تغيير الفراغ العام (سلسلة nupdate) {state = nupdate ؛ this.nodifyObservers (State) ؛ }} حدد واجهة المراقب:
حزمة test.edu.mainrole ؛ الواجهة العامة iobserver {public void update (String NewState) ؛ } مراقبون محددون:
حزمة test.edu.mainrole ؛ الطبقة العامة observerobj1 تنفذ iobserver {private string observerState ؛ Override Public Void Update (String State) {ObserVerState = State ؛ System.out.println ("حالة المراقب 1 هي:" + ObserverState) ؛ }} حزمة test.edu.mainrole ؛ الطبقة العامة observerobj2 تنفذ iobserver {private string observerState ؛ Override Public Void Update (String State) {ObserVerState = State ؛ System.out.println ("حالة المراقب 2 هي:" + ObserverState) ؛ }} عميل الاختبار:
حزمة test.edu.mainrole ؛ عميل الفئة العامة { / ** * param args * / public static void main (string [] args) {roal stability = new reb () ؛ iobserver observer1 = new ObserverObj1 () ؛ iobserver observer2 = new ObserverObj2 () ؛ الموضوع. add (observer1) ؛ الموضوع. add (observer2) ؛ موضوع. change ("تحديث!") ؛ }} نتائج التشغيل:
حالة المراقب 1 هي: تحديث! حالة المراقب 2 هي: تحديث!
ما سبق هو كل شيء عن هذا المقال ، وآمل أن يلهمك أن تتعلم.