🔹 الگوی «Delegation» در «Kotlin» یکی از قدرتمندترین ابزارهای طراحی است که به شما اجازه میدهه بدون ارثبری مستقیم، قابلیتهای یک کلاس رو به کلاس دیگه واگذار کنی!
🔹 «Delegation» یعنی به جای اینکه کلاس A همه متدهای کلاس B رو پیادهسازی کنه، اونها رو به یک شیء از کلاس B بسپاره.
🔹 «Kotlin» با کلیدواژه «by» این کار رو خیلی راحت کرده. کافیه توی تعریف کلاس از «by» استفاده کنی تا پیادهسازی متدها به طور خودکار از شیء delegat گرفته بشه.
🔹 مزیت اصلی: کاهش وابستگی به «Inheritance» و افزایش ترکیبپذیری کد. دیگه لازم نیست با سلسلهمراتب پیچیده ارثبری کلنجار بری.
🔹 کاربرد واقعی: مثلاً فرض کن یک «Interface» به نام «Logger» داری که متد «log» رو تعریف میکنه. میتونی دو پیادهسازی مختلف براش بنویسی: یکی برای چاپ در کنسول و یکی برای ذخیره در فایل. بعد با «Delegation» کلاس اصلی رو به یکی از این پیادهسازیها وصل کنی.
🔹 کد زیر رو ببین:
🔹 اینجا «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
🔹 «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