<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 1. 委托模式 委托模式也叫代理模式,是最常用的一種設計模式。在`Kotlin`中,委托是通過`by`關鍵字實現的,并且主要分為兩種形式,一種是類委托,一種是屬性委托 ## 1.1 類委托 > 包含兩個對象,一個是委托類,一個是被委托類。在委托類中并沒有真正的功能方法,該類的功能是通過調用被委托類中的方法實現的。 從上面我們可以知道其實就是抽象接口和實現的關系。比如下面的案例: ~~~ interface Dinner{ fun getInfo(name: String); } class Person: Dinner{ override fun getInfo(name: String) { println("吃晚飯--${name}") } } // 委托 class Bob: Dinner by Person() {} fun main() { Bob().getInfo("魚香茄子") } ~~~ 結果: ``` 吃晚飯--魚香茄子 ``` 上面這種寫法需要事先知道,并且固定了由誰來委托處理。有時候可能需要動態,比如下面的寫法: ~~~ interface Dinner{ fun getInfo(name: String); } class Person: Dinner{ override fun getInfo(name: String) { println("人吃晚飯--${name}") } } class Animal: Dinner{ override fun getInfo(name: String) { println("動物吃晚飯--${name}") } } // 委托 class Bob(dinner: Dinner): Dinner by dinner fun main() { Bob(Person()).getInfo("魚香茄子") Bob(Animal()).getInfo("魚香茄子") } ~~~ 結果: ``` 人吃晚飯--魚香茄子 動物吃晚飯--魚香茄子 ``` 也就是委托可以交給類,也可以交給類對象實例。 ## 1.2 屬性委托 屬性委托是指一個類的某個屬性值**不是在類中直接進行定義,而是將其委托給一個代理類**,從而實現對該類的屬性進行統一管理。 對于`val`類型的屬性,只需提供一個`getValue()`方法即可,但是對于`var`類型的屬性,則需要提供`getValue()`和`setValue()`方法。 ~~~ class Person{ var name = "辣子雞" operator fun setValue(bob: Bob, property: KProperty<*>, s: String) { this.name = s } operator fun getValue(bob: Bob, property: KProperty<*>): String { return this.name } } // 屬性委托 class Bob(){ var name: String by Person() } fun main() { var bob = Bob() bob.name = "拉面" println("Bob喜歡吃${bob.name}") } ~~~ 結果: ``` Bob喜歡吃拉面 ``` 注意: `setValue()`方法和`getValue()`方法前必須使用`operator`關鍵字修飾。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看