国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

詳解PHP中的狀態模式編程

2024-05-04 22:35:12
字體:
來源:轉載
供稿:網友

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

UML圖

2015811162847657.jpg (454×146)

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


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

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

UML圖

2015811165624664.jpg (467×164)

示例代碼

 

 <?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);             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鞍山市| 澄迈县| 辽中县| 鞍山市| 万全县| 化州市| 扬中市| 台东县| 富阳市| 和顺县| 龙岩市| 新巴尔虎左旗| 开封市| 镇雄县| 景谷| 恩施市| 宁陵县| 西安市| 阜南县| 历史| 台南县| 桦南县| 遵义县| 新疆| 静海县| 清苑县| 溧阳市| 施甸县| 固安县| 霍州市| 松阳县| 微博| 聂拉木县| 定西市| 汨罗市| 色达县| 南江县| 阿勒泰市| 武宁县| 兴安盟| 镇宁|