91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中狀態模式編程的示例分析

發布時間:2021-09-02 14:09:28 來源:億速云 閱讀:141 作者:小新 欄目:開發技術

這篇文章主要介紹PHP中狀態模式編程的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

定義
狀態模式,又稱狀態對象模式(Pattern of Objects for State),狀態模式就是對象的行為模式。狀態模式允許一個對象在其內部狀態改變的時候改變其行為。這個對象看上去就像是改變了它的類一樣

UML圖

PHP中狀態模式編程的示例分析

狀態模式中主要角色
抽象狀態角色(State):定義一個接口或抽象類State,用以封裝環境對象的一個特定的狀態所對應的行為
具體狀態(ConcreteState)角色:每一個狀態類都實現了環境(Context)的一個狀態所對應的行為
環境(Context)角色:定義客戶端所感興趣的接口,并且保留一個具體狀態類的實例。這個具體狀態類的實例給出此環境對象的現有狀態


使用場景
考慮一個在線投票系統的應用,要實現控制同一用戶只能投一票,如果一個用戶反復投票,而且投票超過5次,則判定為惡意刷票,如果投票超過8次,需要加入黑名單

要使用狀態模式實現,首先要把投票過程的各種狀態定義出來,根據以上描述大致分為四種狀態:正常投票,惡意投票,黑名單投票。然后創建一個投票管理對象(相當于Context)

UML圖

PHP中狀態模式編程的示例分析

示例代碼

 <?php 
  
 /** 
  * 抽象狀態類 
  * @author wzy 
  * 
  */ 
 interface VoteState 
 { 
  
  /** 
   * 需要實現的公共方法 
   */ 
  public function vote (); 
 } 
  
 /** 
  * 具體狀態——正常投票 
  * 
  * @author wzy 
  *   
  */ 
 class NormalVoteState implements VoteState 
 { 
  
  public function vote () 
  { 
   echo "這是一個正常投票!"; 
  } 
 } 
  
 /** 
  * 具體狀態——惡意投票 
  * 
  * @author wzy 
  *   
  */ 
 class RepeatVoteState implements VoteState 
 { 
  
  public function vote () 
  { 
   echo "這是一個惡意投票!"; 
  } 
 } 
  
 /** 
  * 具體狀態——黑名單投票 
  * 
  * @author wzy 
  *   
  */ 
 class BlockVoteState implements VoteState 
 { 
  
  public function vote () 
  { 
   echo "這是一個黑名單投票!"; 
  } 
 } 
  
 /** 
  * Context角色 
  */ 
 class VoteManager 
 { 
  
  /** 
   * 投票數量 
   * 
   * @var int 
   */ 
  private $vote_count; 
  
  /** 
   * 狀態類實例 
   * 
   * @var object 
   */ 
  private $voteInstance; 
  
  /** 
   * 構造函數,初始化成員屬性 
   * 
   * @param int $count    
   */ 
  public function __construct ($count = 1) 
  { 
   $this->vote_count = $count; 
  } 
  
  /** 
   * 客戶端調用的接口函數 
   */ 
  public function setState ($count) 
  { 
   if (! is_null($count)) { 
    $this->vote_count = $count; 
   } 
   if ($this->vote_count < 5) { 
    $this->voteInstance = new NormalVoteState(); 
   } else 
    if ($this->vote_count < 8) { 
     $this->voteInstance = new RepeatVoteState(); 
    } else { 
     $this->voteInstance = new BlockVoteState(); 
    } 
    
   $this->voteInstance->vote(); 
  } 
 } 
  
 /** 
  * 模擬客戶端操作 
  */ 
  
 $object = new VoteManager(); 
 $object->setState(1); 
 echo "<br>"; 
 $object->setState(6); 
 echo "<br>"; 
 $object->setState(10);

回顧狀態模式
狀態和行為
所謂對象的狀態,通常指的就是對象實例的屬性的值;而行為指的就是對象的功能,在具體一點說,行為大多可以對應到方法上

狀態模式的功能就是分離狀態的行為,通過維護狀態的變化,來調用不同狀態對應的功能。也就是說,狀態和行為是相關聯的,它們的關系可以描述為:狀態決定行為

由于狀態是在運行期被改變的,因為行為也會在運行期根據狀態的改變而改變

環境和狀態處理對象
在狀態模式中,環境(Context)是持有狀態的對象,但是環境自己并不處理跟狀態相關的行為,而是把處理狀態的功能委托給了狀態對應的狀態處理類來處理

在具體的狀態處理中經常需要獲取環境(Context)自身的數據,可以考慮用抽象類替代接口,這樣可能會更方便參數的傳遞

客戶端一般只與環境(Context)交互。客戶端可以用狀態對象來配置一個環境(Context),一旦配置完畢,就不再需要和狀態對象打交道了。客戶端通常不負責運行期間的狀態維護,也不負責后續到底使用哪一個具體的狀態處理對象

以上是“PHP中狀態模式編程的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

马边| 游戏| 罗甸县| 枣强县| 交城县| 昌黎县| 花垣县| 托克托县| 精河县| 长垣县| 巴里| 阿图什市| 雅江县| 安图县| 湖南省| 吉木乃县| 镇巴县| 嵩明县| 永平县| 南木林县| 阿勒泰市| 肃宁县| 旅游| 湟源县| 淳化县| 万山特区| 青阳县| 原平市| 彭山县| 靖安县| 轮台县| 屏山县| 屯留县| 甘洛县| 武清区| 横峰县| 称多县| 卓资县| 莒南县| 龙门县| 镇原县|