الگوها را با یک مثال بشناسیم.

الگوها راهحل افراد متخصص برای مشکلاتی است که در خلال توسعه نرمافزار در یک زمینه خاص رخ میدهند. آشنایی و استفاده از این الگوها توسعه نرمافزار را تسهیل و تسریع مینماید چرا که طراحی صحیح برای یک مساله را در اختیار توسعهدهنده قرار میدهد. در این مطلب تلاش میکنیم با معرفی چند مثال آشنایی اولیهای با تعدادی از الگوهای رفتاری GoF پیدا کنیم.
الگوی Observer
فرض کنید دادهای دارید که بر اساس آن، یک ماتریس، یک نمودار ستونی و یک نمودار دایرهای رسم شده است. هر تغییر در این داده اولیه، باید در هر یک از ماتریس، نمودار ستونی و نمودار دایرهای تغییر ایجاد کند. در واقع این سه اشیائی هستند که به داده اولیه وابسته اند و از تغییرات آن بایستی اطلاع پیدا کرده و به طور خودکار به روز رسانی شوند.
در این جا الگوی Observer به کار میآید.
این الگو وابستگی یک به چند بین اشیا به وجود میآورد بنابراین وقتی حالت یک شی تغییر کند، تمام اشیا وابسته به آن، مطلع شده و به طور خودکار به روزرسانی میگردند.
شکل نمودار کلاس در این حالت مطابق زیر است:
الگوی Strategy
فرض کنید یک کاری به شیوههای مختلف انجام شود. مثلا یک کلاس حروف چین که مسئولیت حروفچینی متن را برعهده داشته باشد و گاهی این حروفچینی ساده، گاهی مربوط به Texو گاهی مربوط به آرایه است. یک کلاس که درخواست حروفچینی دارد بدون توجه یا حتی اطلاع از این الگوریتمهای مختلف، درخواست حروفچینی میکند.
در این حالت الگوی استراتژی راهگشاست.
هدف از این الگو تعریف خانوادهای از الگوریتمها، encapsulate کردن هرکدام و تغییرپذیر کردن آنهاست. استراتژی این امکان را میدهد که الگوریتم مستقل از کلاینتی که از آن استفاده میکند تغییر کند.
نمودار کلاس آن نیز به شکل زیر است.
الگوی State:
فرض کنید یک اتصال TCP دارید که توابعی مثل باز کردن و بستن دارد. میدانیم اگر اتصال TCP در وضعیتهای متفاوتی باشد، این توابع کار متفاوتی را بایستی انجام دهند. اگر روی کلاس اصلی برای هر یک از این حالتها وراثت بزنیم، و مثلا دو زیر کلاس اتصال باز و اتصال بسته داشته باشیم، بعد از باز شدن یک اتصال بسته، دیگر شئ اتصال بسته عملا وجود ندارد و بایستی کشته شود! در چنین شرایطی الگوی State به کارمان میآید. کافی است وضعیت اتصال را نگهداشته تا در حین اجرای کد رفتار مناسب اتخاذ شود.
در تعریف این الگو آمده است، این الگو امکان تغییر رفتار را متناسب با تغییرات حالت درونی شئ امکانپذیر میکند. ظاهرا شئ کلاس خود را عوض میکند.
نمودار کلاس آن به شکل زیر است:
الگوی Mediator
مثال برج مراقبت مثال خیلی خوبی برای این مساله در دنیای واقع است. هر هواپیمایی قصد فرود یا برخواستن داشته باشد، به جای اینکه با تک تک هواپیماهای دیگر هماهنگ کند، از برج مراقبت دستورات لازم را دریافت میکند.
در برنامهنویسی، فرض کنید یک تغییر فونت در یک پنجره، لازم باشد در ویجتهای مختلفی مثل دکمه، متن و … اعمال شود. در اینجا هم یک mediator میتواند به کار آید.
در تعریف این الگو آمده است که این الگو نحوه تعامل اشیا با یکدیگر را encapsulate میکند و coupling بین آنها را کاهش میدهدچرا که ارتباط مستقیم آنها به خاطر استفاده از mediator، به ارتباط غیرمستقیم تبدیل شده است.
نمودار کلاس آن نیز به شکل زیر است:
منبع:
GoF Design Patterns
dzone.com