بررسی الگوی Delegation
معنی delegation به فارسی یعنی وکالت دادن.
یکی از ویژگی هایی که کاتلین رو محبوب کرده پشتیبانی نیتیو از الگوهای برنامه نویسی پرکاربرده؛ یکی از این الگو ها دلیگیشن (Delegation) است که توسط کاتلین به صورت نیتیو پشتیبانی میشه.
هنگامی که یک اینترفیس رو توسط یک کلاس پیادهسازی میکنیم گاهی نیاز به همون پیادهسازی در کلاس دیگه داریم برای جلوگیری از دوباره نویسی از الگوی delegation استفاده میکنیم
با این روش به کلاس جدید وکالت استفاده از توابع و پراپرتی های public پیادهسازی شده در یک کلاس دیگه رو می دیم.
fun main(){
val audioP = AudioPlayer()
val videoP = VideoPlayer(audioP)
audioP.stop()
videoP.play()
}
interface BasePlayer{
fun play()
fun stop()
fun next()
}
class AudioPlayer(): BasePlayer{
override fun play() {
println("Playing...")
}
override fun stop() {
println("Stopping...")
}
override fun next() {
println("Next")
}
}
class VideoPlayer(b: BasePlayer): BasePlayer by b{
var isFullScreen: Boolean = false
}
میتونیم توابع یا پراپرتی هایی رو که به وکالت گرفتیم بازنویسی کنیم
در مثال زیر برای خلاصه کردن از نوشتن قسمت هایی از کد بالا خودداری کردیم.
...
interface BasePlayer{
val codecType: String
...
}
class AudioPlayer: BasePlayer{
override val codecType: String = "MPEG-2"
...
}
class VideoPlayer(b: BasePlayer): BasePlayer by b {
override val codecType: String = "H265"
...
}
توجه
الگوی delegation در کاتلین فقط برای اینترفیس ها قابل استفاده است