سبد خرید

6 دیزاین پترن مهم برای برنامه نویس های اندروید

6 دیزاین پترن مهم برای برنامه نویس های اندروید

قبل از اینکه بخوام این 6 دیزاین پترن (Design Pattern) مهم رو معرفی کنم و آموزش بدم، اول از همه باید بدونیم که دیزا‌ین پترن چیه؟

دیزاین پترن یعنی چی؟

کلمه دیزاین که در اینجا مورد استفاده قرار گرفته ربطی به طراحی رابط کاربری و … نداره.

بلکه به طراحی ساختار اپلیکیشن و نحوه کد زنی ما مربوط میشه.

دیزا‌ین پترن (که در فارسی بهش الگوی طراحی هم میگن) یک راه حل برای رفع مشکلات مهندسی نرم افزار هستش.

برخلاف بعضی از راه حل ها که فقط در یکسری موارد مورد استفاده قرار میگیرن، از دیزا‌ین پترن ها میتونیم در بسیاری از برنامه ها استفاده کنیم.

دیزا‌ین پترن ها در واقع یکسری اصول هستند که ساختار اپلیکیشن ما رو ایجاد میکنن.

دیزا‌ین پترن ها میتونن سرعت توسعه و برنامه نویسی ما رو افزایش بدن، باعث بهبود اپلیکیشن های ما میشن، در کل اگر از دیزا‌ین پترن ها استفاده کنیم یک اپلیکیشن خوب با پرفرمنس بالاتری خواهیم داشت.

انواع دیزا‌ین پترن ها

به طور کلی، دیزا‌ین پترن ها به 3 دسته کلی تقسیم میشن :

  • Creational Pattern : این نوع الگوهای طراحی مکانیزم‌های ایجاد شی مختلفی را فراهم می‌کنند، که انعطاف‌پذیری و استفاده مجدد از کد موجود را، افزایش می‌دهد.
  • Structural Pattern : این نوع الگوهای طراحی اشیا و کلاس‌ها را به ساختارهای بزرگ‌تر مونتاژ کنند، در حالی که این ساختارها انعطاف‌پذیر و کارآمد هستند.
  • Behavioral Pattern : این نوع الگوهای طراحی با الگوریتم‌ها و وظایف بین اشیا مرتبط هستند.

6 تا از مهمترین Design Pattern ها برای برنامه نویس های اندروید

هر کدوم از دسته بندی های بالا چندین دیزا‌ین پترن دارن که توی این مقاله 6 تا از مهمترین اونا که توی برنامه نویسی اندروید کاربرد بیشتری داره رو میخوام بررسی کنم.

حتما از این دیزاین پترن ها توی پروژه های خودتون استفاده کنید که واقعا خیلی مهم هستن.

1) دیزاین پترن Singleton

این دیزاین پترن جز دسته بندی Creational Pattern هستش.

Singleton کلاسی است که اجازه می دهد تنها یک نمونه از خودش ایجاد شود و به آن نمونه ایجاد شده دسترسی پیدا کند.

این شامل متغیرهای ثابت است که می تواند نمونه های منحصر به فرد و خصوصی خود را، در خود جای دهد.

در سناریوهایی مورد اسفاده قرار میگیرد که برنامه نویس بخواهد نمونه سازی یک کلاس را، فقط به یک شی محدود کند.

این معمولا زمانی مفید است که یک شی واحد، برای هماهنگ کردن اقدامات در یک سیستم، مورد نیاز است.

singleton-design-pattern-android-nouri-academy_2-دیزاین پترن

ویژگی های Singleton

  • فقط یک نمونه ازش ساخته میشه
  • به صورت گلوبال قابل دسترسی است

مثال :

در زیر بخشی از یک عملیات رو میبینید که چندین فایل کنار هم آماده شدن.

Storage درواقع به صورت Singleton تعریف شده که نحوه استفاده از اون رو هم توی تکه کد زیر میتونید ببینید.

(تکه کد زیر صرفا برای مثال و آشنایی شما با ساختار این دیزاین پترن هستش)

object Storage {
    fun execute(query : SqlQuery) {

    }
}

class SqlQuery {

}

interface Persistable  {
    fun persist()
}

class Person : Persistable {
    override fun persist() {
        val query = SqlQuery()
        Storage.execute(query)
    }
}

fun main() {
    val person = Person()
    person.persist()
}

2) دیزاین پترن Factory

این دیزاین پترن جز دسته بندی Creational Pattern هستش.

Factory از تمام منطق ایجاد شی مراقبت می کند و در این الگو، یک کلاس کنترل می کند که کدام شی باید نمونه سازی شود.

شما می توانید از آن در جایی استفاده کنید که ممکن است نخواهید یک کلاس مشخص را، مشخص کنید.

factory-design-pattern-android-nouri-academy-دیزاین پترن

(تکه کد زیر صرفا برای مثال و آشنایی شما با ساختار این دیزاین پترن هستش)

interface Currency {
    fun symbol(): String
    fun code(): String
}

enum class Country {
    UnitedState, Spain
}

class USDollar : Currency {
    override fun symbol(): String {
        return "$"
    }

    override fun code(): String {
        return "USD"
    }
}

class Euro : Currency {
    override fun symbol(): String {
        return "€"
    }

    override fun code(): String {
        return "EUR"
    }
}

object CurrencyFactory {

    fun currency(country: Country): Currency {
        return when (country) {
            Country.UnitedState -> {
                USDollar()
            }
            Country.Spain -> {
                Euro()
            }
        }
    }
}

3) دیزاین پترن Builder

این دیزاین پترن جز دسته بندی Creational Pattern هستش.

Builder به ما این کمک رو میکنه که بتونیم موارد بسیار پیچیده رو به صورت جدا جدا درست کنیم و در قالب یک چیز واحد ازش استفاده کنیم.

فرض کنید که میخوایم یک کلاس کلی برای نمایش دیالوگ درست کنیم.

این دیالوگ ممکنه عنوان، متن، عکس، دکمه و .. داشته باشه. حتی بعضی مواقع نیاز نباشه که بخوایم از کل اون موارد استفاده کنیم.

مثلا نمیخوایم از ویژگی عکسی که قرار دادیم استفاده کنیم.

در این شرایط میتونیم کلاس Dialog که میتونه یک کلاس پیچیده و سختی باشه رو توسط Builder ، بخش های مختلف اون رو مورد استفاده قرار بدیم.

builder-design-pattern-android-nouri-academy-دیزاین پترن

(تکه کد زیر صرفا برای مثال و آشنایی شما با ساختار این دیزاین پترن هستش)

class Hamburger private constructor(
    val cheese: Boolean,
    val beef: Boolean,
    val onions: Boolean
) {
    class Builder {
        private var cheese: Boolean = true
        private var beef: Boolean = true
        private var onions: Boolean = true

        fun cheese(value: Boolean) = apply { cheese = value }
        fun beef(value: Boolean) = apply { beef = value }
        fun onions(value: Boolean) = apply { onions = value }

        fun build() = Hamburger(cheese, beef, onions)
    }
}

4) دیزاین پترن Facade

این دیزاین پترن جز دسته بندی Structural Pattern هستش.

Facade یک interface سطح بالاتری را ارائه می دهد که استفاده از مجموعه ای از interfaceهای دیگر را آسان تر می کند.

facade-design-pattern-android-nouri-academy-دیزاین پترن

به تکه کد زیر توجه کنید :

interface BooksApi {
  @GET("books")
  fun listBooks(): Call<List<Book>>
}

در واقع زمانی که از Retrofit داریم استفاده میکنیم از این دیزاین پترن دارین پیروی میکنیم.

یک interface داریم که API ها رو داخل اون قرار میدیم.

5) دیزاین پترن Adapter

این دیزاین پترن جز دسته بندی Structural Pattern هستش.

Adapter رو یه جورایی میتونیم بگیم که مثل پل ارتباط بین کلاس های مختلف رو ایفا میکنه.

یک مثال واقعی بخوام بزنم، یک کارت خوان رو در نظر بگیرید که به عنوان یک آداپتور بین کارت حافظه و لپ تاپ عمل می کند.

شما کارت حافظه را به کارت خوان و کارت خوان را به لپ تاپ وصل می کنید تا کارت حافظه از طریق لپ تاپ قابل خواندن باشد.

یا مثلا کلاس Adapter که یک پل ارتباطی بین کلاس مدل و XML در RecyclerView هستش.

adapter-design-pattern-android-nouri-academy-دیزاین پترن

6) دیزاین پترن Dependency Injection

این دیزاین پترن شامل دسته بندی ای که بالاتر بهش اشاره کردم نمیشه.

Dependency Injection یا تزریق وابستگی یکی از مهمترین مسائلی هستش که توی برنامه نویسی باید بهش توجه کنید.

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

هرچقدر وابستگی بخش های مختلف به هم دیگه کمتر باشه، ما اپلیکیشنی با توسعه پذیری خیلی بالاتر رو خواهیم داشت.

اندروید چندین کتابخونه برای تزریق وابستگی داره که معروف ترین و پراستفاده ترین اونا موارد زیر هستن :

  • Dagger
  • Dagger-Hilt
  • Koin

برای یادگیری کامل تزریق وابستگی میتنی به لینک زیر مراجعه کنی.

دیدگاه‌ها ۰