Chain of Responsibility Design pattern
انهارده حتكلم عن Design pattern شيق جدا و ممتع جدا جدا 🤗🤗
و هو Chain of Responsibility 😍😍
امتى بستخدم ال Chain of Responsibility
بستخدمه لما احب اخلى اكتر من object يهندل request
بمعنى عندى اكتر من اوبيجكت بتعامل معاهم لو فى واحد ما هندلش الريكوست بتاعى بخليه يدخل على الاوبجيكت اللى بعده لوحده
Use when you want to give more than one object a chance to handle a request.
من عيوبه انك مش بتعرف تعمله debug فى ال run time
Hard to observe the run time characteristics and debug
ممكن نقرا عن المميزات و العيوب اكتر هنا
https://miafish.wordpress.com/2014/12/31/chain-of-responsibility-pros-and-cons/
طيب بيشتغل ازاى بقى الديزاين باترن دا
هو بسيط بس محتاج شوية تركيز مش اكتر
دا مثال بسيط جدا بيقولك لو انت خارج من البيت مثلا و فى شوية حاجات بتعملها زى مثلا انك تتاكد ان المعاد مظبوط انك قفلت النور و انك قفلت الباب دول 3 مهام اهم لازم تعملهم عشان تنزل
فا انت بتعمل الديزان باترن دا عبارة عن abstract class سمناه HomeChecker
فيه 3 methods
اول واحده بتاعه ال check و دى abstract عشان اى كلام من ال 3 لازم يستخدمها عشان دول اللى هعمل عليهم ال check بتاعى
تانى واحده setSuccessor بتاخد اوبجيكت من ال 3 بردو اللى بيكونه وخدين extends من ال abstract class بتاعى اللى هو HomeChecker و بتعمله set ف ال property
بس و method ال next دى بتتشك هل فى object و لازم تتشك عشان لو مفيش حيضرب معاك error فا بتتشك لو فيه خلاص شغل عليه method ال check بس كدا بسيط جدا بس محتاجة تركيز مش اكتر
عندى بقى ال 3 مهام بتوعى ب 3 classes
Locks, Lights, Alarm
طبعا كلهم بيـ extends من ال ديزاين باترن بتاعى اللى هو HomeChecker فا طبيعى حيخده ال abstract method check
كل اللى بتعمله انها بتتاكد من الحاجة دى لو الباب مش مقفول طلع throw exception
لو مقفول خلاص عادى كمل و ادخل ع الاوبجيكت اللى بعده لو النور مش مقفول طلع exception بردو لو مقفول ادخل ع الاوبجيكت اللى بعده و هكذا بكل بساطة بس
عندك بقى كلاس HomeStatus دا فيه بقى الحاجات بتاعتك شوف المفروض بتيجى من الداتا بيز بقى او اى حاجة هو انا حاطتها static دلوقتى جرب اعم اى واحد فيهم false و رن الكود حتلاقى طلع exception بقى
طيب ال client call بيشتغل ازاى بقى
عادى جدا بتاخد اوبجيكت من كل 3 كلاسات بتوعك
locks = new Locks
lights = new Lights
alarm = new Alarm
بعد كده بتـ set مع كل اوبجيكت اوبجيكت تانى من ال chain بتعتك
locks->setSuccessor($lights)
lights->setSuccessor($alarm)
و بعدين بتشغل ميثود ال check ع اول واحد و هو حيمشى ع الباقى لوحده
locks->check(new HomeStatus)
بس كدا دا بكل بساطة يارب اكون قدرت اوضح الفكرة هو بسيط بس محتاج تركيز شوية تجربه كتير عشان تحاول تفهمه
الكود على ال github هنا
https://github.com/MarwanMohamed/designPatterns/blob/master/ChainOfResponsibility.php

تعليقات
إرسال تعليق