أنماط تصميم بي -- نمط المراقب
لقد كانت القراءة الأولى رئيس تصميم وانماط وقد قررت مؤخرا وكتابة بعض أنماط كأمثلة فب لمصلحة بلدي. أول واحد أنني قررت أن يصل هو رمز نمط المراقب . التعريف الرسمي للنقش المراقب هو :
نمط المراقب (مجموعة فرعية من غير متزامن نشر / اشترك نمط ) هي البرمجيات نمط التصميم الذي و الكائن ، ودعا هذا الموضوع ، وتحتفظ بقائمة من توابعه ، والمراقبين ودعا ، ويخطر لهم تلقائيا من أي تغييرات الدولة ، وعادة عن طريق الاتصال واحد من هذه الأساليب . وهي تستخدم أساسا لتنفيذ نظم توزيع معالجة الحدث.
كما نظم تصبح أكثر فضفاضة إلى جانب التأكد من أنه عندما حدث يحدث في جميع الأنظمة التي تتطلب معرفة وعلم من هذه التحديثات. على سبيل المثال ، بلوق وظيفة ، بعد توفير وظيفة قد نحتاج لتحديث محرك البحث (على سبيل المثال وسين) ، وتحديث خريطة الموقع لدينا ، والعلامات ، والبريد الإلكتروني للمستخدمين المشتركين ، وما إلى ذلك النمط المراقب تسمح للمطورين لإضافة المستمعين إضافية دون تحرير موضوعها ملاحظتها . عن طريق حقن المراقبين (أي عملية تحديث محرك البحث المراقب ، مولد خريطة الموقع ، الخ) في موضوع (أي تحرير نظام بلوق آخر) يمكننا السماح لها بأداء كافة التحديثات اللازمة دون أية تغييرات.
قبل المراقب هو نمط حددت خدعة المعتاد سيكون لتحديث كائن يمكن ملاحظتها مع خط إضافية من التعليمات البرمجية لتحديث النظام المطلوبة ، وإزالة سطر من التعليمات البرمجية كما هو مطلوب. هذا لا يسمح لإضافة وإزالة بسهولة المراقبين.
التحديثات إخضاع كافة المراقبين لديها عن طريق أسلوب التحديث. هذا الأسلوب يستدعي تحديث الأسلوب في كل مراقب والتي هي مستمدة من تنفيذ واجهة. والمتابع إضافة إزالة أنفسهم من خلال الأساليب في كائن يمكن ملاحظتها.
هذا في الأساس هو عليه! أجد دائما مثالا ليكون أفضل طريقة للتعلم / التفاهم حتى هنا في بلدي سبيل المثال ترميز بالتسجيل...
المراقب النمط في فب
في سبيل المثال لقد ابتدعت نظام الأخبار (NewsAggregator) الذي يرسل التحديثات عنوان صحفي لأصغر قنوات الأخبار. هنا sytem أخبار يأخذ مكان من هذا الموضوع ، ويمكن ملاحظتها ، الخ في حين أن قنوات الأخبار اتخاذ دور المراقبين أو المستمعين.
وبمجرد أن المراقبين initialised إرفاق و فصل أنفسهم عن هذا الموضوع على النحو الذي يرونه مناسبا. في بلدي على سبيل المثال لقد خلق ثلاثة مراقبين ، تفحص هذه العناوين التي بعث بها هذا الموضوع ، و'الصراخ' الأخبار إذا كان ذلك مناسبا لها. تتم تسمية ثلاثة مراقبين على طول أدناه وفقا لشروط لأنها تفحص عندما تلقي عناوين الأخبار :
- الرياضة المراقب : 'لعبة الركبي' ، 'كرة القدم' ، 'تنس'
- أخبار المراقب : 'السياسة' ، 'تمويل' ، 'الحكومة'
- القيل والقال المراقب : 'المشاهير' ، 'الموسيقى' ، 'الموضة'
بعد initalising هذا الموضوع أود أن أضيف المراقبون الأخبار والقيل والقال وترسل عملية تحديث الأخبار. بعد هذا وأضاف المراقب الرياضة قبل أن يتم إرسال التحديثات إلى مزيد من الأخبار. وأخيرا يتم إزالة المراقب القيل والقال قبل إرسال عنوانا أخبار النهائي بها.
في ثلاث فئات مختلفة المراقب تنفيذ المراقب واجهة ، وهذا يعطيها واجهة واضحة / من خلال طريقة التي سوف تلقي التحديثات. شريطة تنفيذ واجهة المراقب أنها ستكون قادرة على تولي أنفسهم لهذا الموضوع. هذا وتبقي أيضا مع نموذج برمجة 'برنامج إلى واجهات تطبيقات لا'. الفئة NewsAggregator يمتد هذا الموضوع فئة مجردة ، الذي يوفر لنا المطلوبة الأساليب العامة الثلاثة :
- updateObservers ()
- addObserver ()
- removeObserver ()
أن ينظر إلى رمز يمكن أن تجري من هنا ، المراقب نقش في بي قيد التشغيل ، ويمكن تحميلها رمز يمكن من هنا ، المراقب في نمط رمز بي إتش بي .
المراقب النصي
<؟ فب / ** * يحتوي هذا الملف على المراقبين * @ * كاتب لويد Watkin * @ منذ 2009/12/23 * / فئة مجردة الموضوع { مجردة addObserver ظيفة عمومية (المراقب المراقب $) ؛ مجردة removeObserver ظيفة عمومية (المراقب المراقب $) ؛ مجردة updateObservers ظيفة عمومية ($ newsHeadline) ؛ } / ** * هذا هو الموضوع لفئة المثال * @ * كاتب لويد Watkin * @ منذ 2009/12/23 * / ArticleAggregator فئة يمتد الموضوع { / ** * حاصل على قائمة المراقبين لدينا * * @ مجموعة فار * / محمية $ _observerList = مجموعة () ؛ / ** * طريقة لإضافة مراقب * * @ $ فار المراقب المراقب باطل * @ عودة * / addObserver العامة وظيفة (المراقب $ مراقب) { دولار هذا> - _observerList [] = $ مراقب ؛ } / ** * الأسلوب لإزالة مراقب * * @ $ فار المراقب المراقب منطقية * @ عودة * / removeObserver العامة وظيفة (المراقب $ مراقب) { foreach ($ هذا> _observerList ك $ مفتاح => $ الحريق المكشوف) { إذا دولار (أوب == $ المراقب) { (دولار هذا> - _observerList [$ مفتاح]) ضبطه ؛ العودة الحقيقية ؛ } } عودة كاذبة ؛ } / ** * طريقة لتحديث المراقبين * * @ $ سلسلة فار newsHeadline باطل * @ عودة * / updateObservers ظيفة عمومية ($ newsHeadline) { foreach ($ هذا> _observerList ك $ الحريق المكشوف) { $ الحريق المكشوف بين> تحديث ($ newsHeadline) ؛ } } / ** * إضافة خبر جديد * * @ $ قصة سلسلة فار باطل * @ عودة * / الوظيفة العامة addNewsStory ($ قصة) { إذا كان (فارغة ($ قصة) | |! is_string ($ قصة)) { رمي InvalidArgumentException الجديدة ('المتوقعة خبرا!') ؛ } دولار هذا> - updateObservers ($ قصة) ؛ } }
الموضوع / سيناريو جدير بالملاحظة
؟ <فب / ** * يحتوي هذا الملف على موضوع @ * كاتب لويد Watkin * @ * منذ 2009/12/23 / مجردة الموضوع الطبقة {مجردة addObserver ظيفة عمومية (المراقب المراقب $) ؛ مجردة removeObserver ظيفة عمومية (المراقب المراقب $ ) ؛ مجردة updateObservers ظيفة عمومية ($ newsHeadline) ؛} / ** * هذا هو الموضوع لفئة المثال * * * * الكاتب @ @ * لويد Watkin منذ 2009/12/23 * / فئة ArticleAggregator يمتد الموضوع {/ ** * حاصل قائمة لدينا * * * فار المراقبين @ مجموعة / المحمية $ _observerList = مجموعة () ؛ / ** * طريقة لإضافة مراقب * @ @ عودة فار المراقب المراقب * $ * الفراغ بين القطاعين العام وaddObserver وظيفة (المراقب المراقب $) {_observerList دولار هذا> - [] = $ المراقب ؛} / ** * طريقة لإزالة مراقب * * * * * @ فار المراقب المراقب $ @ * عودة منطقية / removeObserver ظيفة عمومية (المراقب المراقب $) {foreach ($ هذا> _observerList ك $ مفتاح => $ الحريق المكشوف) {إذا دولار (أوب == $ المراقب) {ضبطه (_observerList دولار هذا -> [$ الرئيسية]) ؛ عودة حقيقية ؛}} عودة كاذبة ؛} / ** * طريقة لتحديث المراقبين * @ $ * فار سلسلة newsHeadline @ عودة * الفراغ / updateObservers ظيفة عمومية ($ newsHeadline) {foreach ($ هذا> _observerList ك $ الحريق المكشوف) {$ التحديث الحريق المكشوف -> ($ newsHeadline) ؛}} / ** * إضافة خبر جديد * * @ فار سلسلة $ * قصة عودة @ * الفراغ / addNewsStory ظيفة عمومية ($ قصة) {إذا (فارغة ($ قصة) | |! is_string ($ قصة)) {رمي InvalidArgumentException الجديدة ('يتوقع أخبار قصة ') ؛!} دولار هذا> - updateObservers ($ قصة) ؛}} تحكم النصي
<؟ فب / ** * نمط التصميم المراقب مثال * @ * كاتب لويد Watkin * @ منذ 2009/12/23 * @ http://www.evilprofessor.co.uk الارتباط * / وتشمل 'observers.php' ؛ وتشمل 'subject.php' ؛ إذا (! فارغة ($ _SERVER ['HTTP_USER_AGENT'])) { صدى ''؛ } / / ماذا نحن فاعلون؟ صدى 'مثال نمط المراقب في بي. PHP_EOL ؛ صدى '================================'. PHP_EOL ؛ / / إعداد موضوعنا $ الموضوع = ArticleAggregator جديدة () ؛ صدى '-- إنشاء ArticleAggregator. PHP_EOL ؛ / / إضافة بعض المراقبين $ addObserver موضوع -> (جديد NewsObserver ()) ؛ (النمام $ = جديدة GossipObserver ()) $ موضوع -> addObserver ؛ '-- أضيفت NewsObverser وGossipObserver' صدى. PHP_EOL. PHP_EOL ؛ / / صفير ، صفير ، صفير... آخر الأخبار! صدى 'خبر عاجل : لاعب الركبي المشاهير يحب المالية. PHP_EOL ؛ صدى '================================================ '. PHP_EOL ؛ $ موضوع -> addNewsStory ('المشاهير لاعب الركبي يحب المالية') ؛ صدى PHP_EOL ؛ صدى '-- SportObserver وقد وجدت بها ويريد ان ينضم الى الفريق!' ؛ $ addObserver موضوع -> (جديد SportObserver ()) ؛ صدى PHP_EOL. PHP_EOL ؛ / / صفير ، صفير ، صفير... آخر الأخبار! صدى 'خبر عاجل : الحكومة عبث مرة أخرى! . PHP_EOL ؛ صدى '======================================='. PHP_EOL ؛ $ موضوع -> addNewsStory ('عبث الحكومة مرة أخرى!') ؛ صدى PHP_EOL ؛ / / صفير ، صفير ، صفير... آخر الأخبار! صدى 'خبر عاجل : أزياء وكرة القدم تجمع بين'. PHP_EOL ؛ صدى '======================================='. PHP_EOL ؛ $ موضوع -> addNewsStory ('الموضة وكرة القدم تجمع بين') ؛ صدى PHP_EOL ؛ / / صفير ، صفير ، صفير... آخر الأخبار! صدى 'خبر عاجل : الموسيقى والسياسة ، وماذا بعد؟ . PHP_EOL ؛ صدى '=========================================='. PHP_EOL ؛ addNewsStory $ موضوع -> ('الموسيقى والسياسة ، وماذا بعد؟') ؛ صدى PHP_EOL ؛ / ** * تعب Gossipers من الأخبار بشكل سريع جدا وقررت أن * لإيقاف الاستماع ، رغم الانباء عن اهتمام اليوم! * / صدى '-- GossipObserver تشعر بالملل ويترك الفريق! . PHP_EOL. PHP_EOL ؛ $ موضوع -> removeObserver ($ النمام) ؛ / / صفير ، صفير ، صفير... آخر الأخبار -- تحديث لقصة في وقت سابق! صدى 'NewsUpdate : أزياء تجمع بين كرة القدم ويقول'. 'الحكومة'. PHP_EOL ؛ صدى '================================================ '. '========='. PHP_EOL ؛ addNewsStory $ موضوع -> ('الموضة وكرة القدم تجمع بين'. يقول الحكومة ') ؛ صدى PHP_EOL ؛ إذا (! فارغة ($ _SERVER ['HTTP_USER_AGENT'])) { صدى ''؛
}



















































مرحبا ،
أولا ، لغتي الإنجليزية ضعيفة جدا ، ثم
هل يمكن أن تخبرني ما هو النظام في الصورة؟
فيدورا 12؟
ما هو الموضوع؟
مرحبا ،
هل يمكن أن تخبرني ما هو النظام في الصورة؟
فيدورا 12؟
ما هو الموضوع؟
تطبيق فيدورا 11 منه مع كيدي. Glasslooks موضوع على ما أعتقد.