iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0

介紹

Kotlin 版的裝飾模式跟 Java 版差別在可以用by這樣就能用委託的方式來實作

裝飾模式實作

  1. 建立粉絲介面
interface Fans {
    fun getTitle(): String
}
  1. 建立稱號抽象類別,使用by來用委託的方式來實作
abstract class Title(private val fans: Fans) : Fans by fans {
}
  1. 建立會員類別,稱號是夥伴
data class Member(var name: String = "") : Fans {
    override fun getTitle(): String {
        return "夥伴"
    }
}
  1. 建立很油類別,用來當稱號
class Oil(private val fans: Fans) : Title(fans) {
    override fun getTitle(): String {
        return "很油" + super.getTitle()
    }
}
  1. 建立狂熱類別,用來當稱號
class Fire(private val fans: Fans) : Title(fans) {
    override fun getTitle(): String {
        return "狂熱" + super.getTitle()
    }
}

裝飾模式測試

  1. 測試案例
val text = StringBuilder()
val member: Fans = Member()

text.append("\n")
text.append("會員加入獲得稱號: ")
text.append(member.getTitle())
text.append("\n")

val oil = Oil(member)
text.append("會員花一千獲得稱號: ")
text.append(oil.getTitle())
text.append("\n")

val fire = Fire(oil)
text.append("會員花一萬獲得稱號: ")
text.append(fire.getTitle())
text.append("\n")
assertEquals("測試", text)
  1. 執行測試
會員加入獲得稱號: 夥伴
會員花一千獲得稱號: 很油夥伴
會員花一萬獲得稱號: 狂熱很油夥伴

上一篇
113/14 - 裝飾模式(Decorator)- Java
下一篇
113/16 - 橋接模式(Bridge)- Java
系列文
肯定會斷賽之在 Android 開發使用設計模式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言