در مقاله قبلی، به بررسی و توضیح الگوهای Creational پرداختیم که به فرآیند ایجاد اشیاء کمک میکنند. در این مقاله، به دسته دیگری از دیزاین پترنها به نام الگوهای Structural (ساختاری) خواهیم پرداخت. این الگوها به نحوه ترکیب و ساختاردهی اشیاء و کلاسها برای ایجاد ساختارهای بزرگتر و پیچیدهتر میپردازند. استفاده از این الگوها میتواند به بهبود خوانایی، انعطافپذیری و قابلیت نگهداری کد کمک کند.
الگوهای Structural بر ترکیب اشیاء و کلاسها برای تشکیل ساختارهای بزرگتر تمرکز دارند. در این مقاله، به معرفی و توضیح سه الگوی پرکاربرد در این دسته میپردازیم: Adapter، Decorator و Composite.
الگوی Adapter به ما اجازه میدهد تا اینترفیس یک کلاس موجود را به یک اینترفیس مورد انتظار تبدیل کنیم. این الگو زمانی مفید است که دو کلاس ناسازگار داریم که باید با هم کار کنند.
فرض کنید در یک اپلیکیشن اندرویدی، نیاز داریم تا از یک کتابخانه خارجی برای نمایش تصاویر استفاده کنیم. این کتابخانه از اینترفیس خاصی برای بارگذاری تصاویر استفاده میکند که با اینترفیس مورد استفاده ما سازگار نیست.
در این مثال، کلاس ImageLoaderAdapter
اینترفیس ImageLoader
را پیادهسازی میکند و از یک نمونه ExternalImageLoader
برای بارگذاری تصویر استفاده میکند.
الگوی Decorator به ما اجازه میدهد تا به صورت پویا به یک شیء قابلیتهای جدید اضافه کنیم بدون اینکه به کلاسهای موجود تغییراتی اعمال کنیم. این الگو برای افزودن ویژگیها و رفتارهای اضافی به اشیاء به صورت انعطافپذیر مفید است.
فرض کنید در یک اپلیکیشن اندرویدی، نیاز داریم تا به یک TextView قابلیتهای اضافی مانند حاشیه و رنگ پسزمینه اضافه کنیم.
برای افزودن حاشیه و رنگ پسزمینه
استفاده از الگوی Decorator در اکتیویتی
در این مثال، کلاسهای BorderedTextView
و BackgroundTextView
به عنوان Decorator عمل میکنند و قابلیتهای جدیدی به TextView
اضافه میکنند.
الگوی Composite به ما اجازه میدهد تا اشیاء را به صورت سلسلهمراتبی ترکیب کنیم و به این ترتیب بتوانیم با مجموعهای از اشیاء به عنوان یک شیء واحد رفتار کنیم. این الگو برای ساختاردهی اشیاء به صورت درختی مفید است.
فرض کنید در یک اپلیکیشن اندرویدی، میخواهیم یک ساختار سلسلهمراتبی از منوهای کشویی (Drawer Menu) را ایجاد کنیم.
ابتدا اینترفیس MenuComponent
را تعریف میکنیم
سپس کلاس MenuItem
را که نمایانگر یک آیتم منو است، تعریف میکنیم
حالا کلاس Menu
را که نمایانگر یک منوی ترکیبی از چندین آیتم منو است، تعریف میکنیم
حالا میتوانیم از الگوی Composite برای ساختاردهی منوها در اکتیویتی خود استفاده کنیم
در این مثال:
کلاسMenuItem
نمایانگر یک آیتم منو است که متد showMenu
را پیادهسازی میکند.
کلاسMenu
نمایانگر یک منوی ترکیبی است که میتواند شامل چندین MenuComponent
باشد
متدshowMenu
را برای نمایش آیتمهای منو پیادهسازی میکند.
استفاده از الگوهای Structural (ساختاری) میتواند به بهبود خوانایی، انعطافپذیری و قابلیت نگهداری کد کمک کند.
هدفم از نوشتن این مقاله معرفی و استفاده برخی از کاربردیترین دیزاین پترنهای Structural و نحوه به کارگیری آنها با مثال های اندرویدی بود.
دیزاین پترنها در اندروید، الگوهای Creational
دیزاین پترنها در اندروید، الگوهای Behavioral
ممنون از زمانی که گذاشتین :))
خدانگهدارتون