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

                >狀態模式 (State Pattern) :允許一個對象在其內部狀態改變時改變它的行為,讓不同狀態的對象看起來似乎修改了它的類,或者說是看起來不是來自同一個類。 ## (一)為什么需要狀態模式 1,將所有與某個狀態有關的行為放到一個類中,并且可以方便地增加新的狀態,只需要改變對象狀態即可改變對象的行為。 2,本模式簡化了發起人類。發起人不再需要管理和保存其內部狀態的一個個版本,客戶端可以自行管理他們所要的這些狀態的版本。 ## (二)狀態模式 UML圖 ![](https://box.kancloud.cn/077230a9864f7053053f6b99c5bc8be8_1020x623.png) ## (三)簡單實例 狀態模式一個最妙的應用就是通過變化狀態擁有不同的能力。比如我們以水為例,水如果是固態,那么它就能融化成液態,如果是液態那么它就能蒸發成氣態,而氣態也能凝華成固態。現在就讓我們用程序來模擬這個過程。 <?php //抽象狀態類 abstract class State{ abstract function handle(); } //固態 class Solid extends State{ public function handle(){ echo '固態 =>融化 =>液態轉化中'.PHP_EOL; } } class Liquid extends State{ public function handle(){ echo '液態 =>蒸發 =>氣態轉化中'.PHP_EOL; } } class Gas extends State{ public function handle(){ echo '氣態 =>凝華 =>固態轉化中'.PHP_EOL; } } //context環境類 -----water class Water{ protected $states = array(); protected $current=0; public function __construct() { $this->states[]=new Solid; $this->states[]=new Liquid; $this->states[]=new Gas; } //水的變化 public function change(){ //告知當前狀態 echo '當前所處狀態'.get_Class($this->states[$this->current]).PHP_EOL; //當前狀態能力 $this->states[$this->current]->handle(); //狀態變化 $this->changeState(); } //狀態變化 public function changeState() { $this->current++ == 2 && $this->current = 0; } } //實例化具體環境角色-----水 $water = new Water; //水的能力變化 ---與它的狀態相關 $water->change(); $water->change(); $water->change(); $water->change(); 當然我們這里只是一個簡單的示例,你完全可以讓一個狀態有多個能力,或者通過給water給一個對外的接口,通過傳參使其轉化為你指定的狀態。
                  <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>

                              哎呀哎呀视频在线观看