人人人妻人人人妻人人人,99精品国产综合久久久久五月天 ,欧美白人最猛性XXXXX,日韩AV无码免费播放

News新聞

業(yè)界新聞動態(tài)、技術(shù)前沿
Who are we?

您的位置:首頁      樂道系統(tǒng)FAQ      PHP設(shè)計模式之狀態(tài)模式定義與用法詳解

PHP設(shè)計模式之狀態(tài)模式定義與用法詳解

標(biāo)簽: 發(fā)布日期:2018-04-18 21:57:47 298

本文實例講述了PHP設(shè)計模式之狀態(tài)模式定義與用法。分享給大家供大家參考,具體如下:

什么是狀態(tài)設(shè)計模式

當(dāng)一個對象的內(nèi)在狀態(tài)改變時允許改變其行為,這個對象看起來像是改變了其類。

狀態(tài)模式主要解決的是當(dāng)控制一個對象狀態(tài)的條件表達(dá)式過于復(fù)雜時的情況。把狀態(tài)的判斷邏輯轉(zhuǎn)移到表示不同狀態(tài)的一系列類中,可以把復(fù)雜的判斷邏輯簡化。

什么時候使用狀態(tài)模式

對象中頻繁改變非常依賴于條件語句。 就其自身來說, 條件語句本身沒有什么問題(如switch語句或帶else子句的語句),不過, 如果選項太多, 以到程序開始出現(xiàn)混亂, 或者增加或改變選項需要花費太多時間, 甚至成為一種負(fù)擔(dān), 這就出現(xiàn)了問題

對于狀態(tài)設(shè)計模式, 每個狀態(tài)都有自己的具體類, 它們實現(xiàn)一個公共接口. 我們不用查看對象的控制流, 而是從另一個角度來考慮, 即對象的狀態(tài).

狀態(tài)機是一個模型, 其重點包括不同的狀態(tài), 一個狀態(tài)到另一個狀態(tài)的變遷, 以及導(dǎo)致狀態(tài)改變的觸發(fā)器.

以開燈關(guān)燈為例子, 狀態(tài)模型的本質(zhì)分為3點:

①狀態(tài)(關(guān)燈和開燈)
②變遷(從關(guān)燈到開燈, 以及從開燈到關(guān)燈)
③觸發(fā)器(燈開關(guān))

所以狀態(tài)模式都需要一個參與者來跟蹤對象所處的狀態(tài). 以Light為例, Light需要知道當(dāng)前狀態(tài)是什么.

示例:開燈關(guān)燈

Light.php

<?php
class Light
{
  private $offState; //關(guān)閉狀態(tài)
  private $onState;  //開啟狀態(tài)
  private $currentState; //當(dāng)前狀態(tài)
  public function __construct()
  {
    $this->offState = new OffState($this);
    $this->onState = new OnState($this);
    //開始狀態(tài)為關(guān)閉狀態(tài)Off
    $this->currentState = $this->offState;
  }
  //調(diào)用狀態(tài)方法觸發(fā)器
  public function turnLightOn()
  {
    $this->currentState->turnLightOn();
  }
  public function turnLightOff()
  {
    $this->currentState->turnLightOff();
  }
  //設(shè)置當(dāng)前狀態(tài)
  public function setState(IState $state)
  {
    $this->currentState = $state;
  }
  //獲取狀態(tài)
  public function getOnState()
  {
    return $this->onState;
  }
  public function getOffState()
  {
    return $this->offState;
  }
}