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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [toc] ## 舉個例子 > 水是世界上最奇特的物質之一,不僅滋潤萬物,更是變化萬千。 > 你很難想象冰、水、氣其實是同一個東西 H2O, > 看到冰你可能更會聯想到玻璃、石頭, > 看到水你可能更會聯想到牛奶、可樂, > 看到氣可能更會聯想到空氣、氧氣。 > 三個不同狀態下的水好像是三種不同的東西。 ![](https://box.kancloud.cn/de885e43d5844caedd4efbc04189ecaf_737x488.png) ## 代碼展示 ```php <?php class Water { private $temperature; private $state; public function __construct($state) { $this->temperature = 25; $this->state = $state; } public function setState($state) { $this->state = $state; } public function changeState($state) { if ($this->state) { echo "由" . $this->state->getStateName() . "變為" . $state->getStateName() . ','; } else { echo "初始化為" . $state->getStateName() . ','; } $this->state = $state; } public function getTemperature() { return $this->temperature; } public function setTemperature($temperature) { $this->temperature = $temperature; if ($this->temperature <= 0) { $this->changeState(new SolidState("固態")); } elseif ($this->temperature <= 100) { $this->changeState(new LiquidState("液態")); } else { $this->changeState(new GaseousState("氣態")); } } public function riseTemperature($step) { $this->setTemperature($this->temperature + $step); } public function reduceTemperature($step) { $this->setTemperature($this->temperature - $step); } public function behavior() { $this->state->behavior($this); } } class State { private $name; public function __construct($name) { $this->name = $name; } public function getStateName() { return $this->name; } public function behavior($water) { } } class SolidState extends State { public function behavior($water) { echo "我性格高冷,當前體溫" . $water->getTemperature() . "攝氏度,我堅如鋼鐵,仿如一冷血動物,請用我砸人,嘿嘿……" . PHP_EOL; } } class LiquidState extends State { public function behavior($water) { echo "我性格溫和,當前體溫" . $water->getTemperature() . "攝氏度,我可滋潤萬物,飲用我可讓你活力倍增……" . PHP_EOL; } } class GaseousState extends State { public function behavior($water) { echo "我性格熱烈,當前體溫" . $water->getTemperature(), "攝氏度,飛向天空是我畢生的夢想,在這你將看不到我的存在,我將達到無我的境界……" . PHP_EOL; } } $water = new Water(new LiquidState("液態")); $water->behavior(); $water->setTemperature(-4); $water->behavior(); $water->riseTemperature(18); $water->behavior(); $water->riseTemperature(110); $water->behavior(); $water->setTemperature(60); $water->behavior(); $water->reduceTemperature(80); $water->behavior(); ``` ``` D:\soft\php72\php.exe D:\project\php_dp\index.php 我性格溫和,當前體溫25攝氏度,我可滋潤萬物,飲用我可讓你活力倍增…… 由液態變為固態,我性格高冷,當前體溫-4攝氏度,我堅如鋼鐵,仿如一冷血動物,請用我砸人,嘿嘿…… 由固態變為液態,我性格溫和,當前體溫14攝氏度,我可滋潤萬物,飲用我可讓你活力倍增…… 由液態變為氣態,我性格熱烈,當前體溫124攝氏度,飛向天空是我畢生的夢想,在這你將看不到我的存在,我將達到無我的境界…… 由氣態變為液態,我性格溫和,當前體溫60攝氏度,我可滋潤萬物,飲用我可讓你活力倍增…… 由液態變為固態,我性格高冷,當前體溫-20攝氏度,我堅如鋼鐵,仿如一冷血動物,請用我砸人,嘿嘿…… Process finished with exit code 0 ``` ## 什么是狀態模式? > 狀態即事物所處的某一種形態。 > 狀態模式是說一個對象在其內部狀態發生改變時,其表現的行為和外在屬性不一樣,這個對象看上去就像是改變了它的類型一樣。 > 狀態模式又稱為對象的行為模式。 ![](https://box.kancloud.cn/5454adf663bfa4c8360b7fa5f3649a64_664x321.png) ## 應用場景 1. 一個對象的行為取決于它的狀態,并且它在運行時可能經常改變它的狀態從而改變它的行為。 1. 一個操作中含有龐大的多分支的條件語句,且這些分支依賴于該對象的狀態,且每一個分支的業務邏輯非常復雜時,我們可以使用狀態模式來拆分他不同分支邏輯,使程序有更好的可讀性可維護性。
                  <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>

                              哎呀哎呀视频在线观看