iT邦幫忙

2024 iThome 鐵人賽

DAY 17
0

介紹

橋接模式在 Kotlin 中並沒有語法糖的寫法,所以跟 Java 的寫法差不多

假如有兩個抽象類別會員和支付

  1. 會員(Member)
    1. 金會員(Gold)
    2. 銀會員(Silver)
  2. 支付(Pay)
    1. 現金支付(Cash)
    2. 信用卡支付(CreditCard)

橋接模式實作

  1. 會員
abstract class Member {
    abstract fun getLevel(): String
}
  1. 金會員
class Gold : Member() {

    override fun getLevel(): String {
        return "金會員"
    }
}
  1. 銀會員
class Silver : Member() {

    override fun getLevel(): String {
        return "銀會員"
    }
}
  1. 支付
abstract class Pay(open val member: Member) {
    abstract fun getPayment(): String
}
  1. 現金支付
class Cash(override val member: Member) : Pay(member) {

    override fun getPayment(): String {
        val text = StringBuilder()
        text.append(member.getLevel())
        text.append(" - ")
        text.append("現金支付")
        return text.toString()
    }
}
  1. 信用卡支付
class CreditCard(override val member: Member) : Pay(member) {

    override fun getPayment(): String {
        val text = StringBuilder()
        text.append(member.getLevel())
        text.append(" - ")
        text.append("信用卡支付")
        return text.toString()
    }
}

橋接模式測試

  1. 測試案例
@Test
fun show() {
    val text = StringBuilder()
    text.append("\n")
    text.append("金會員現金測試: ")
    val payCashGold: Pay = Cash(Gold())
    text.append(payCashGold.getPayment())
    text.append("\n")
    text.append("銀會員現金測試: ")
    val payCashSilver: Pay = Cash(Silver())
    text.append(payCashSilver.getPayment())
    text.append("\n")
    text.append("金會員信用卡測試: ")
    val payCreditCardGold: Pay = CreditCard(Gold())
    text.append(payCreditCardGold.getPayment())
    text.append("\n")
    text.append("銀會員信用卡測試: ")
    val payCreditCardSilver: Pay = CreditCard(Silver())
    text.append(payCreditCardSilver.getPayment())
    text.append("\n")
    assertEquals("測試", text)
}
  1. 執行測試
金會員現金測試: 金會員 - 現金支付
銀會員現金測試: 銀會員 - 現金支付
金會員信用卡測試: 金會員 - 信用卡支付
銀會員信用卡測試: 銀會員 - 信用卡支付

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

尚未有邦友留言

立即登入留言