برنامه نویس اندروید
دیزاین پترنها در اندروید، الگوهای Creational
![](https://files.virgool.io/upload/users/1788548/posts/zyl8d7sttbds/przzqff9glk6.jpg)
در دنیای برنامهنویسی، دیزاین پترنها (Design Patterns) راهکارهای قابل استفاده مجددی برای مسائل معمولی در توسعه نرمافزار هستند.
این الگوها نه تنها به بهبود کیفیت کد و خوانایی آن کمک میکنند، بلکه باعث کاهش زمان توسعه و افزایش قابلیت نگهداری برنامهها میشوند.
دیزاین پترنها به سه دسته اصلی تقسیم میشوند: Creational (ایجاد کننده)، Structural (ساختاری) و Behavioral (رفتاری).
در این مقاله، به معرفی دسته Creational میپردازیم و مثالهایی از کاربرد این الگوها در توسعه اپلیکیشنهای اندرویدی با زبان کاتلین رو بررسی میکنیم.
الگوهای Creational (ایجاد کنندهها)
الگوهای Creational مربوط به فرآیند ایجاد اشیاء هستند. این الگوها به گونهای طراحی شدهاند که پیچیدگیهای ایجاد اشیاء را از بین برده و فرایند ساخت آنها را سادهتر و انعطافپذیرتر میکنند. در این دسته، چندین الگوی معروف وجود دارد که در ادامه به بررسی چند نمونه از آنها خواهیم پرداخت.
الگوی Singleton (تکنمونه)
الگوی Singleton به ما اجازه میدهد تا از یک کلاس تنها یک نمونه ایجاد کنیم و به جای ایجاد چندین نمونه، همیشه به همان یک نمونه دسترسی داشته باشیم. این الگو برای مدیریت منابع محدود یا دسترسی به تنظیمات گلوبال مناسب است.
![](https://files.virgool.io/upload/users/1788548/posts/zyl8d7sttbds/riywns2praxu.png)
در این مثال، کلاس DatabaseHelper
با استفاده از object
در کاتلین به صورت Singleton پیادهسازی شده است. هر بار که به DatabaseHelper
دسترسی پیدا کنیم، به همان یک نمونه دسترسی خواهیم داشت.
الگوی Factory Method (متد کارخانه)
الگوی Factory Method یک اینترفیس یا کلاس پایهای تعریف میکند که از طریق آن میتوان اشیاء مختلفی را بدون مشخص کردن کلاس دقیق آنها ایجاد کرد. این الگو به ما کمک میکند تا وابستگی به کلاسهای خاص را کاهش دهیم و کدهای منعطفتری بنویسیم.
مثال:
![](https://files.virgool.io/upload/users/1788548/posts/zyl8d7sttbds/gkpo98kno25b.png)
سپس دو کلاس AndroidButton و IOSButton که اینترفیس Button را پیادهسازی میکنند، تعریف میکنیم.
![](https://files.virgool.io/upload/users/1788548/posts/zyl8d7sttbds/nnhkqvfdmndx.png)
یک کلاس انتزاعی Dialog تعریف میکنیم که متد createButton را به صورت انتزاعی تعریف کرده و یک متد renderWindow برای رندر کردن دکمه دارد.
![](https://files.virgool.io/upload/users/1788548/posts/zyl8d7sttbds/vbkmgl0xqkf0.png)
![](https://files.virgool.io/upload/users/1788548/posts/zyl8d7sttbds/tfovqtlfg0zy.png)
در نهایت، از الگوی Factory Method استفاده میکنیم تا بدون وابستگی به کلاسهای خاص، دکمههای مختلفی ایجاد کنیم.
الگوی Prototype (نمونه اولیه)
الگوی Prototype به ما اجازه میدهد تا با کپی کردن یک نمونه اولیه، اشیاء جدیدی ایجاد کنیم. این الگو به خصوص زمانی مفید است که ایجاد اشیاء جدید از یک کلاس پرهزینه باشد یا زمانی که نیاز به ایجاد چندین شیء مشابه داریم.
مثال :
فرض کنید در یک اپلیکیشن اندرویدی، نیاز داریم تا چندین شیء TextView با تنظیمات مشابه ایجاد کنیم.
ابتدا یک کلاس TextViewPrototype ایجاد میکنیم:
![](https://files.virgool.io/upload/users/1788548/posts/zyl8d7sttbds/zyna2lnaicdd.png)
در اینجا، کلاس TextViewPrototype با استفاده از یک نمونه اولیه TextView، تنظیمات اولیه را در متغیرهای text و textSize ذخیره میکند. متد clone نیز یک نمونه جدید از TextViewPrototype با همان تنظیمات ایجاد میکند.
حالا در اکتیویتی یا فرگمنت خود، از این الگو استفاده میکنیم:
![](https://files.virgool.io/upload/users/1788548/posts/zyl8d7sttbds/jmoem81pg377.png)
در این مثال، ابتدا یک TextView اولیه ایجاد میکنیم و سپس از آن یک نمونه اولیه با استفاده از TextViewPrototype میسازیم. بعد از آن، با استفاده از متد clone، دو TextView جدید با تنظیمات مشابه اما با متنهای متفاوت ایجاد میکنیم و آنها را به لایه اضافه میکنیم.
الگوی Builder (سازنده)
الگوی Builder برای ساخت اشیاء پیچیده به کار میرود. این الگو به ما اجازه میدهد تا فرآیند ساخت یک شیء را به مراحل کوچکتر تقسیم کنیم و از ساختارهای پیچیده جلوگیری کنیم.
مثال:
![](https://files.virgool.io/upload/users/1788548/posts/zyl8d7sttbds/yalek5mntpqh.png)
در این مثال، کلاس Notification با استفاده از الگوی Builder پیادهسازی شده است. این الگو به ما اجازه میدهد تا به صورت مرحله به مرحله یک شیء Notification را ایجاد کنیم.
![](https://files.virgool.io/upload/users/1788548/posts/zyl8d7sttbds/zymjkqhfpjup.png)
در نهایت، با استفاده از کلاس Builder، یک شیء Notification ایجاد میکنیم.
نتیجهگیری
الگوهای Creational به ما کمک میکنند تا فرآیند ایجاد اشیاء را بهبود بخشیم و از پیچیدگیهای غیر ضروری جلوگیری کنیم. استفاده از این الگوها در توسعه اپلیکیشنهای اندرویدی میتواند به کدی منظمتر، انعطافپذیرتر و قابل نگهداریتر منجر شود.
هدفم از نوشتن این مقاله معرفی و استفاده برخی از کاربردیترین دیزاین پترنهای Creational و نحوه به کارگیری آنها با مثال های اندرویدی بود.
دیزاین پترنها در اندروید، الگوهای Structural
دیزاین پترنها در اندروید، الگوهای Behavioral
ممنون از زمانی که گذاشتین :))
خدانگهدارتون
مطلبی دیگر از این انتشارات
نکات نوشتن commend در کد
مطلبی دیگر از این انتشارات
چهارصد بار سریع تر داده ها رو بخوانید (فایل باینری)
مطلبی دیگر از این انتشارات
تجربه من از کار با Tailwindcss