مریم محمدی
مریم محمدی
خواندن ۲ دقیقه·۴ سال پیش

الگوهای طراحی نرم افزار-پترن های رفتاری-Iterator and mediator Pattern

پترن Iterator

زمانی که بخواهیم بر روی یک مجموعه از آیتم ها پیمایش انجام دهیم، میتونیم از پترن iterator استفاده کنیم.

در صورتی که بخواهیم وظیفه‌ای پیمایشی آیتم‌های مجموعه رو همزمان بر عهده مجموعه قرار بدیم کار پیچیده میشود، به هم دلیل، کار پیمایش را از آن مجموعه جدا می کنیم. این آبجکت ها که وظیفه پیمایش بر روی مجموعه را دارند، iterator می گوییم. ما به خود مجموعه میگیم که فلان iterator را به ما بده و ما با استفاده از آن، بر روی مجموعه پیمایش انجام میدهیم.

این آبجکت iterator لازم است به اعضای مجموعه دید داشته باشد و بنابراین encapsulation بین آبجکت های داخل مجموعه از بین رفته است ولی در عوض client هایی که میخواهند از آن استفاده کنند، دیگر این encapsulation را نقض نمیکنند. نحوه پیمایش با کمک iterator به صورت های مختلف بسته به نوع iterator میتونه متفاوت باشه برای مثال با الگوریتم bfs یا dfs پیاده سازی شده است.

تمام این مدل های مختلف iterator اینترفیس ثابت را پیاده سازی می کند یعنی در هر زبانی اگر بگوییم یک iterator میخواهم، اینترفیس ثابتی به ما برمیگردد که شامل next، first یا hasNext (ممکنه isDone هم بگن) و currentItem هستش که از اثرات این پترن است که در تمامی زبان ها مفهوم یکسان پیاده سازی شده است.

بنابراین وظیفه پیمایش بر روی مجموعه‌ها از اون بیرون اومده و این وظیفه به خود iteratorها محول شده و در list بیان می‌کنم که فلان iterator رو به من بده.

این iterator ها میتوانند همان زمانی که currentItem را صدا میکنیم آبجکت جدید را بسازند و لزومی ندارد که صرفا بر روی یک لیست یا collection با داده های از قبل آماده باشند.

پترن Mediator

وقتی تعداد زیادی آبجکت داریم، که اینها به طرز پیچیده ای با هم کار میکنند. حالا برای از بین بردن coupling بین بخش های مختلف وسط اینها یک مدیر قرار میدیم که همه با این ارتباط در ارتباط باشند. به این مدیر یک mediator یا میانجی میگن. اینطوری coupling بسیار کم میشه ولی دیگر تمامی بخش های مختلف به این couple میشوند که این آبجکت میانجی میتونه تبدیل به God class بشه و بسیار خطرناکه و مگه خیلی بی ارزه که از این پترن استفاده کنیم چون باید همیشه مراقب آن باشیم. برای مثال یکی از مواردی که خیلی این پترن در آن کاربرد داره این هستش که سیستم کاملاً stable شده ولی ماژولهای آن خیلی در هم تنیده شده اند و نیاز به maintenance و تغییرات خاصی در آینده نداشته باشه. بنابراین سیستم به نحوی stable شده اما حالا بخواهیم coupling که بین بخش ها رو کم کنیم، میتوانیم یک میانجی یا مدیاتور این بین قرار بدیم.

بنابراین وقتی کار ارتباط بخش های مختلف را از آبجکت ها جدا میکنیم آیجکت ها خودشان ساده میشن.

بنابراین فهمیدن کد آبجکتها بسیار ساده تر میشه. ولی ایرادی که داره این هستش که این میانجی خودش bottle neck میشه چون همه می خوان فقط در این ارتباط با این آبجکت باشن.

gofiterator design patterndesign patternbehavioral design patternmediator design pattern
شاید از این پست‌ها خوشتان بیاید