برنامه نویس اندروید - https://www.linkedin.com/in/iryebohs/
الگویِ طراحیِ Chain of Responsibility (جاوا و کاتلین)
فرض کنید برادرِ شما بهتون بگه برام یه لیوان آب بیار و شما کار داشته باشید ، شما به خواهرتون میگید یه لیوان آب دست داداش بده ! خواهرتونم فرضا کار داشت ، به اون یکی خواهرتون میگه یه لیوان آب بده به داداش و خواهر کوچیک تر لیوان آبو بهش میده ، الگویِ Chain of Responsibility هم تقریبا همینه ، Chain به معنی "زنجیر" و Responsibility هم که میشه "وظیفه" ، پس زنجیره ای از وظایف رو داریم ، یک وظیفه به این زنجیره داده میشه و اونقدر بین اعضای زنجیره جا به جا میشه تا به عضوِ مناسب از این زنجیره برسه که بتونه انجامش بده ، ای الگو جزء Behavioralها حساب میشه .
مشکلی که در این الگو حل شده این بوده که در Run-Time مشخص میشه کدوم یک از اعضایِ Chain باید پردازش رو انجام بدن ، یعنی بر اساس ورودیها و ... اعضایِ Chain اون رو هم پاس میدن تا به عضوِ مورد نظر برسه
شِمای کلی قضیه به این صورته :
در واقع Handler بنده اصلی کلاس (interface یا abstract) بوده که در خودش عضوی از جنسِ خودش داره (مثلا یک Linked List میمونه) که این طوری زنجیره تشکیل میشه ، کلاسهای ConcreteHandler پیادهسازی Handler هستند ، کدِ قسمت Client رکوئست رو به Handler میفرسته تا مورد پردازش قرار بگیره .
صورت مساله
فرض شئ به نام Job داریم ، Job میتونه از نوع ضروری یا غیر ضروری باشه ، همین طور میتونه سریع یا کند باشه و همین طور آسون یا سخت باشه ، در یک سازمان سه سطح نیرو داریم : سطح حرفهای ، متوسط و تازهکار . نیرویِ حرفهای باید کارهای ضروری و کند و سخت رو انجام بده ، نیروی متوسط میتونه همه کارها رو انجام بده و نیروی تازه کار فقط باید کارهای غیرضروری ، سریع و آسون رو انجام بده ، مدل سازی ما این طوری میشه که نیروها همون Handler هستند ، زنجیرهای از نیروها رو داریم و بهشون Task میدیم ، این Task بین نیروها میچرخه تا زمانی که به آدم مناسبی وصل بشه ، زمانی که این اتفاق افتاد باید اون نیرو باید به وضعیت در حالِ کار تغییر وضعیت بده تا Job جدیدی نگیره :
و برای استفاده هم یک کلاس Chain درست میکنیم که Head زنجیره رو درون خودش داره و با استفاده از اون در کدِ Client پردازش رو انجام میدیم :
باقی مقالات در مورد الگویهای طراحی رو در این مقاله بخونید .
من رو در لینکدین و اینستاگرام دنبال کنید ???
اگه دوست داشتید میتونید به صفحه Spotify بنده هم برید و موسیقی های منو گوش بدید ???
مطلبی دیگر از این انتشارات
لیستی از مفاهیم مهم برای درک بهتر برنامه نویسی اندروید
مطلبی دیگر از این انتشارات
ایجاد استایل برای TabLayout در اندروید استودیو
مطلبی دیگر از این انتشارات
اندروید و گردل: معرفی ساختار