<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 31.裝飾圖案 裝飾器模式允許動態擴展對象。 對于本部分,我們希望讀者在此處 [https://docs.ruby-lang.org/en/2.7.0/SimpleDelegator.html](https://docs.ruby-lang.org/en/2.7.0/SimpleDelegator.html) 閱讀有關`SimpleDelegator`的信息。 實際上,我們已經從 Ruby 文檔中直接采用了本書中的示例。 看下面的程序,鍵入并執行它。 ```rb # decorator.rb class User def born_on Time.new(1989, 9, 10) end end class UserDecorator < SimpleDelegator def birth_year born_on.year end end decorated_user = UserDecorator.new(User.new) puts decorated_user.birth_year puts decorated_user.__getobj__ puts decorated_user.class ``` 輸出量 ```rb 1989 #<User:0x00005592d8d63470> UserDecorator ``` 現在讓我們看看它是如何工作的。 首先,我們有一個名為`User`的類,它具有一個名為`born_on`的函數,該函數返回用戶出生時的`Time`對象。 假設我們只想添加一個返回出生年份的功能,我們可以修改原始類`User`并添加一個僅返回出生年份的功能`birth_year`,或者我們可以使用裝飾器來 擴展`User`的功能。 看一下這段代碼 ```rb class UserDecorator < SimpleDelegator def birth_year born_on.year end end ``` 在這里,我們創建一個名為`UserDecorator`的類,該類繼承自`SimpleDelegator`,后者是內置的 Ruby 功能,可幫助我們構建裝飾器。 在其中,我們編寫了一個稱為`birth_year`的函數,該函數僅返回出生年份。 現在,我們需要使用此語句將`User`擴展為`UserDecorator` ```rb decorated_user = UserDecorator.new(User.new) ``` 在此語句中,`decorated_user`是`UserDecorator`的實例,但它具有`User`和`UserDecorator`的所有方法。 因此,調用`decorated_user.birth_year`可以正常工作。 從理論上講,我們已經擴展了`User`類的功能,而不會弄亂它。
                  <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>

                              哎呀哎呀视频在线观看