最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

學習php設(shè)計模式 php實現(xiàn)狀態(tài)模式

 更新時間:2015年12月07日 16:25:51   作者:胖胖  
這篇文章主要介紹了php設(shè)計模式中的狀態(tài)模式,使用php實現(xiàn)狀態(tài)模式,感興趣的小伙伴們可以參考一下

一、意圖
允許一個對象在其內(nèi)部狀態(tài)改變時改變它的行為。對象看起來似乎修改了它的類
狀態(tài)模式變化的位置在于對象的狀態(tài)

二、狀態(tài)模式結(jié)構(gòu)圖

三、狀態(tài)模式中主要角色
抽象狀態(tài)(State)角色:定義一個接口,用以封裝環(huán)境對象的一個特定的狀態(tài)所對應的行為
具體狀態(tài)(ConcreteState)角色:每一個具體狀態(tài)類都實現(xiàn)了環(huán)境(Context)的一個狀態(tài)所對應的行為
環(huán)境(Context)角色:定義客戶端所感興趣的接口,并且保留一個具體狀態(tài)類的實例。這個具體狀態(tài)類的實例給出此環(huán)境對象的現(xiàn)有狀態(tài)
四、狀態(tài)模式的優(yōu)點和缺點
1、它將與特定狀態(tài)相關(guān)的行為局部化
2、它使得狀態(tài)轉(zhuǎn)換顯示化
3、State對象可被共享
五、狀態(tài)模式適用場景
1、一個對象的行為取決于它的狀態(tài),并且它必須在運行時刻根據(jù)狀態(tài)改變它的行為
2、一個操作中含有龐大的多分支的條件語句,且這些分支依賴于該對象的狀態(tài)。這個狀態(tài)通常用一個或多個枚舉常量表示。通常,有多個操作包含這一相同的條件結(jié)構(gòu)。State模式模式將每一個條件分支放入一個獨立的類中。這使得你可以要所對象自身的情況將對象的狀態(tài)作為一個對象,這一對象可以不依賴于其他對象而獨立變化
六、狀態(tài)模式與其它模式
單例模式(singleton模式):具體狀態(tài)對象通常是單例模式
享元模式(flyweight模式):享元模式解釋了何時以及怎樣共享狀態(tài)對象
七、狀態(tài)模式PHP示例

<?php
/**
 * 抽象狀態(tài)角色
 */
interface State {
 
  /**
   * 方法示例
   */
  public function handle(Context $context);
}
 
/**
 * 具體狀態(tài)角色A
 * 單例類
 */
class ConcreteStateA implements State {
  /* 唯一的實例 */
  private static $_instance = null;
 
  private function __construct() {
 
  }
 
  /**
   * 靜態(tài)工廠方法,返還此類的唯一實例
   */
  public static function getInstance() {
    if (is_null(self::$_instance)) {
      self::$_instance = new ConcreteStateA();
    }
 
    return self::$_instance;
  }
 
  public function handle(Context $context) {
    echo 'Concrete Sate A handle method<br />';
    $context->setState(ConcreteStateB::getInstance());
  }
 
}
 
/**
 * 具體狀態(tài)角色B
 * 單例類
 */
class ConcreteStateB implements State {
  /* 唯一的實例 */
 
  private static $_instance = null;
 
  private function __construct() {
  }
 
  /**
   * 靜態(tài)工廠方法,返還此類的唯一實例
   */
  public static function getInstance() {
    if (is_null(self::$_instance)) {
      self::$_instance = new ConcreteStateB();
    }
 
    return self::$_instance;
  }
 
  public function handle(Context $context) {
    echo 'Concrete Sate B handle method<br />';
    $context->setState(ConcreteStateA::getInstance());
  }
 
}
 
/**
 * 環(huán)境角色
 */
class Context {
 
  private $_state;
 
  /**
   * 默認為StateA
   */
  public function __construct() {
    $this->_state = ConcreteStateA::getInstance();
  }
 
  public function setState(State $state) {
    $this->_state = $state;
  }
 
  public function request() {
    $this->_state->handle($this);
  }
 
}
 
/**
 * 客戶端
 */
class Client {
 
  /**
   * Main program.
   */
  public static function main() {
    $context = new Context();
    $context->request();
    $context->request();
    $context->request();
    $context->request();
  }
 
}
 
Client::main();
?>

以上就是使用php實現(xiàn)狀態(tài)模式的代碼,還有一些關(guān)于狀態(tài)模式的概念區(qū)分,希望對大家的學習有所幫助。

相關(guān)文章

最新評論

沐川县| 枞阳县| 安西县| 东源县| 丽江市| 龙州县| 奉新县| 天全县| 泽库县| 黄浦区| 黎平县| 潞城市| 沧州市| 卢氏县| 濉溪县| 左云县| 肃宁县| 广安市| 镇远县| 永福县| 两当县| 博客| 赤城县| 赞皇县| 保山市| 府谷县| 永靖县| 沅陵县| 铁岭县| 卓尼县| 德兴市| 叶城县| 襄城县| 皋兰县| 金门县| 肥乡县| 大丰市| 开封市| 崇左市| 拜城县| 武乡县|