در مقاله قبلی، به بررسی و توضیح الگوهای Structural پرداختیم که به نحوه ترکیب و ساختاردهی اشیاء و کلاسها برای ایجاد ساختارهای بزرگتر و پیچیدهتر میپرداختند.در این مقاله، به دسته دیگری از دیزاین پترنها به نام الگوهای Behavioral (رفتاری) خواهیم پرداخت.
الگوهای طراحی رفتاری به حل مسائل مربوط به تعامل و ارتباط بین اشیاء میپردازند. این الگوها به بهبود انعطافپذیری و کارایی نرمافزار کمک میکنند. در توسعه اندروید، استفاده از این الگوها میتواند به ایجاد کد تمیزتر و قابل نگهداریتر منجر شود.
الگویObserver یک مکانیزم اشتراک-انتشار را تعریف میکند که در آن تغییرات یک شیء (معروف به subject یا observable) به طور خودکار به سایر اشیاء وابسته (معروف به observers) اطلاع داده میشود. این الگو امکان ایجاد ارتباط یک-به-چند بین اشیاء را فراهم میکند، به طوری که وقتی وضعیت یک شیء تغییر میکند، تمام وابستگان آن به طور خودکار مطلع و بهروز میشوند.
نحوه انتشار داده ها توسط LiveData یا flow ها در اندروید
در این مثال، LiveData
به عنوان یک Observable عمل میکند. ViewModel
دادهها را نگهداری و بهروز میکند، و UI (Activity یا Fragment) به عنوان Observer عمل کرده و هر زمان که دادهها تغییر کنند، بهروز میشود. این الگو باعث جدا شدن منطق داده از UI و مدیریت بهتر چرخه حیات میشود.
الگوی Strategy خانوادهای از الگوریتمها را تعریف میکند، هر الگوریتم را کپسوله میکند و آنها را قابل تعویض میسازد. این الگو به کلاینت اجازه میدهد تا الگوریتم را مستقل از کلاینتهایی که از آن استفاده میکنند، تغییر دهد. این الگو زمانی مفید است که شما چندین راه برای انجام یک کار دارید و میخواهید به راحتی بین آنها سوئیچ کنید.
استراتژیهای مختلف برای لود کردن تصاویر در اندروید
سپس با یک کلاس واسط اینترفیس مورد نظر را ست میکنیم و تابع لود عکس را در همین کلا قرار میدهیم.
برای استفاده از این پترن نیز میتوانیم بصورت زیر عمل کینم
در این مثال، ما میتوانیم بین استراتژیهای مختلف لود کردن تصویر (مثل Glide و Picasso) سوئیچ کنیم بدون اینکه کد اصلی را تغییر دهیم. این امر انعطافپذیری زیادی به برنامه میدهد و تست و نگهداری کد را آسانتر میکند.
الگوی State به یک شیء اجازه میدهد رفتار خود را زمانی که وضعیت داخلیاش تغییر میکند، تغییر دهد. به نظر میرسد که شیء کلاس خود را تغییر داده است. این الگو برای مدیریت رفتارهای پیچیده و وابسته به وضعیت بسیار مفید است.
مدیریت وضعیتهای مختلف یک دکمه در UI اندروید
و سپس از این وضعیت ها در یک کلاس CustomButton استفاده میکنیم
و در نهایت از این کلاس استفاده میکنیم
به همین سادگی :))
در این مثال، دکمه میتواند در وضعیتهای مختلفی باشد (فعال، غیرفعال، در حال بارگذاری) و رفتار و ظاهر آن بسته به وضعیت فعلیاش تغییر میکند. این الگو به ما امکان میدهد تا رفتارهای پیچیده و وابسته به وضعیت را به روشی ساختاریافته و قابل مدیریت پیادهسازی کنیم.
الگوی Command یک درخواست را به عنوان یک شیء کپسوله میکند. این امر به شما امکان میدهد کلاینتها را با درخواستهای مختلف پارامتری کنید، عملیات را در صف قرار دهید یا لاگ کنید، و عملیات برگشتپذیر را پشتیبانی کنید. این الگو لایهای از انتزاع بین عمل و اجراکننده آن ایجاد میکند.
پیادهسازی سیستم مدیریت دانلود در اندروید
و سپس برای بخش اضافه کردن مورد جدید به لیست دانلود ها به این شیوه عمل میکنیم
در نهایت برای استفاده از این کلاس به این شکل عمل میکنیم
در این مثال، هر دانلود به عنوان یک Command مجزا در نظر گرفته میشود. این به ما امکان میدهد تا دانلودها را به صورت جداگانه مدیریت کنیم، آنها را لغو کنیم، و حتی در صورت نیاز، عملیات undo را پیادهسازی کنیم.
این الگو یک زنجیره از پردازشگرها ایجاد میکند که هر کدام فرصت دارند درخواست را پردازش کنند یا آن را به پردازشگر بعدی در زنجیره پاس دهند.
سیستم اعتبارسنجی فرم ثبتنام
ابتدا یک کلاس پایه برای این کار تعریف میکنیم
قصد داریم در این مثال از ۳ نمونه ولیدیشن استفاده کنیم
و در نهایت استفاده این کلاس ها در لاجیک
در این مثال، ما یک زنجیره از Validatorها ایجاد کردهایم که هر کدام بخشی از اعتبارسنجی را انجام میدهند. برای مثال، اعتبارسنجی ایمیل شامل بررسی خالی نبودن و سپس بررسی فرمت صحیح ایمیل است. این الگو به ما اجازه میدهد تا قوانین اعتبارسنجی را به راحتی اضافه، حذف یا تغییر دهیم بدون اینکه نیاز به تغییر کد اصلی داشته باشیم.
الگوهای طراحی رفتاری که در این مقاله بررسی کردیم، ابزارهای قدرتمندی در جعبه ابزار هر توسعهدهنده اندروید هستند. این الگوها راهحلهای آزموده شدهای برای مسائل رایج در طراحی نرمافزار ارائه میدهند و میتوانند به طور قابل توجهی کیفیت و قابلیت نگهداری کد را بهبود بخشند.
هدفم از نوشتن این مقاله معرفی و استفاده برخی از کاربردیترین دیزاین پترنهای Behavioral و نحوه به کارگیری آنها با مثال های اندرویدی بود.
دیزاین پترنها در اندروید، الگوهای Creational
دیزاین پترنها در اندروید، الگوهای Structural
ممنون از زمانی که گذاشتین :))
خدانگهدارتون