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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## [使用繼承設計](https://lingcoder.gitee.io/onjava8/#/book/09-Polymorphism?id=%e4%bd%bf%e7%94%a8%e7%bb%a7%e6%89%bf%e8%ae%be%e8%ae%a1) 學習過多態之后,一切看似都可以被繼承,因為多態是如此巧妙的工具。這會給設計帶來負擔。事實上,如果利用已有類創建新類首先選擇繼承的話,事情會變得莫名的復雜。 更好的方法是首先選擇組合,特別是不知道該使用哪種方法時。組合不會強制設計是繼承層次結構,而且組合更加靈活,因為可以動態地選擇類型(因而選擇相應的行為),而繼承要求必須在編譯時知道確切類型。下面例子說明了這點: ~~~ // polymorphism/Transmogrify.java // Dynamically changing the behavior of an object // via composition (the "State" design pattern) class Actor { public void act() {} } class HappyActor extends Actor { @Override public void act() { System.out.println("HappyActor"); } } class SadActor extends Actor { @Override public void act() { System.out.println("SadActor"); } } class Stage { private Actor actor = new HappyActor(); public void change() { actor = new SadActor(); } public void performPlay() { actor.act(); } } public class Transmogrify { public static void main(String[] args) { Stage stage = new Stage(); stage.performPlay(); stage.change(); stage.performPlay(); } } ~~~ 輸出: ~~~ HappyActor SadActor ~~~ **Stage**對象中包含了**Actor**引用,該引用被初始化為指向一個**HappyActor**對象,這意味著`performPlay()`會產生一個特殊行為。但是既然引用可以在運行時與其他不同的對象綁定,那么它就可以被替換成對**SadActor**的引用,`performPlay()`的行為隨之改變。這樣你就獲得了運行時的動態靈活性(這被稱為狀態模式)。與之相反,我們不能在運行時決定繼承不同的對象,那在編譯時就完全確定下來了。 有一條通用準則:使用繼承表達行為的差異,使用屬性表達狀態的變化。在上個例子中,兩者都用到了。通過繼承得到的兩個不同類在`act()`方法中表達了不同的行為,**Stage**通過組合使自己的狀態發生變化。這里狀態的改變產生了行為的改變。
                  <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>

                              哎呀哎呀视频在线观看