Codeit Mobile
94 subscribers
3 photos
1 video
243 links
📱 آموزش برنامه‌نویسی موبایل

Kotlin • Android

🚀 آموزش ساده، کاربردی و پروژه‌محور
💡 مخصوص توسعه‌دهندگان موبایل
Download Telegram
🔹 الگوی «Delegation» در «Kotlin» یکی از قدرتمندترین ابزارهای طراحی است که به شما اجازه میدهه بدون ارث‌بری مستقیم، قابلیت‌های یک کلاس رو به کلاس دیگه واگذار کنی!

🔹 «Delegation» یعنی به جای اینکه کلاس A همه متدهای کلاس B رو پیاده‌سازی کنه، اون‌ها رو به یک شیء از کلاس B بسپاره.

🔹 «Kotlin» با کلیدواژه «by» این کار رو خیلی راحت کرده. کافیه توی تعریف کلاس از «by» استفاده کنی تا پیاده‌سازی متدها به طور خودکار از شیء delegat گرفته بشه.

🔹 مزیت اصلی: کاهش وابستگی به «Inheritance» و افزایش ترکیب‌پذیری کد. دیگه لازم نیست با سلسله‌مراتب پیچیده ارث‌بری کلنجار بری.

🔹 کاربرد واقعی: مثلاً فرض کن یک «Interface» به نام «Logger» داری که متد «log» رو تعریف می‌کنه. می‌تونی دو پیاده‌سازی مختلف براش بنویسی: یکی برای چاپ در کنسول و یکی برای ذخیره در فایل. بعد با «Delegation» کلاس اصلی رو به یکی از این پیاده‌سازی‌ها وصل کنی.

🔹 کد زیر رو ببین:

interface Logger {
fun log(message: String)
}

class ConsoleLogger : Logger {
override fun log(message: String) {
println("Console: $message")
}
}

class FileLogger : Logger {
override fun log(message: String) {
// ذخیره در فایل
}
}

class UserService(logger: Logger) : Logger by logger {
fun createUser(name: String) {
log("Creating user $name")
// منطق ساخت کاربر
}
}


🔹 اینجا «UserService» واسط «Logger» رو از طریق شیء ورودی (مثلاً «ConsoleLogger») پیاده‌سازی می‌کنه. هر وقت توی «UserService» متد «log» صدا زده بشه، به طور خودکار به «ConsoleLogger» برون‌سپاری میشه.

🔹 با این روش می‌تونی رفتار «UserService» رو بدون تغییر کد اصلی، عوض کنی. مثلاً یه «FileLogger» بدی بهش تا لاگ‌ها توی فایل ذخیره بشه.

🔹 نکته: «Delegation» مخصوصاً در الگوهای طراحی مثل «Strategy»، «Decorator» و حتی «Dependency Injection» کاربردی داره. یادش بگیر تا کدت خیلی تمیزتر و تست‌پذیرتر بشه.

🔹 برای پیشرفته‌ترها: ترکیب «Delegation» با «Property Delegates» تو «Kotlin» (مثل «lazy»، «observable») یه دنیا امکانات در اختیارت میذاره.

#Codeit #Android #Kotlin #Jetpack #DelegationPattern #CleanCode #SoftwareDesign #OOP

🌐 Codeit → https://code-it.ir

━━━━━━━━━━━━━━━
@CodeitMobile
2