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

學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)狀態(tài)模式

 更新時間:2015年12月07日 16:25:51   作者:胖胖  
這篇文章主要介紹了php設(shè)計(jì)模式中的狀態(tài)模式,使用php實(shí)現(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)所對應(yīng)的行為
具體狀態(tài)(ConcreteState)角色:每一個具體狀態(tài)類都實(shí)現(xiàn)了環(huán)境(Context)的一個狀態(tài)所對應(yīng)的行為
環(huán)境(Context)角色:定義客戶端所感興趣的接口,并且保留一個具體狀態(tài)類的實(shí)例。這個具體狀態(tài)類的實(shí)例給出此環(huán)境對象的現(xiàn)有狀態(tài)
四、狀態(tài)模式的優(yōu)點(diǎn)和缺點(diǎn)
1、它將與特定狀態(tài)相關(guān)的行為局部化
2、它使得狀態(tài)轉(zhuǎn)換顯示化
3、State對象可被共享
五、狀態(tài)模式適用場景
1、一個對象的行為取決于它的狀態(tài),并且它必須在運(yùn)行時刻根據(jù)狀態(tài)改變它的行為
2、一個操作中含有龐大的多分支的條件語句,且這些分支依賴于該對象的狀態(tài)。這個狀態(tài)通常用一個或多個枚舉常量表示。通常,有多個操作包含這一相同的條件結(jié)構(gòu)。State模式模式將每一個條件分支放入一個獨(dú)立的類中。這使得你可以要所對象自身的情況將對象的狀態(tài)作為一個對象,這一對象可以不依賴于其他對象而獨(dú)立變化
六、狀態(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 {
  /* 唯一的實(shí)例 */
  private static $_instance = null;
 
  private function __construct() {
 
  }
 
  /**
   * 靜態(tài)工廠方法,返還此類的唯一實(shí)例
   */
  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 {
  /* 唯一的實(shí)例 */
 
  private static $_instance = null;
 
  private function __construct() {
  }
 
  /**
   * 靜態(tài)工廠方法,返還此類的唯一實(shí)例
   */
  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;
 
  /**
   * 默認(rèn)為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實(shí)現(xiàn)狀態(tài)模式的代碼,還有一些關(guān)于狀態(tài)模式的概念區(qū)分,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • sqlyog 中文亂碼問題的設(shè)置方法

    sqlyog 中文亂碼問題的設(shè)置方法

    sqlyog 中文亂碼的設(shè)置方法
    2008-10-10
  • 用PHP編寫和讀取XML的幾種方式

    用PHP編寫和讀取XML的幾種方式

    今天我看了IBM的一些官方文檔和一些XML的相關(guān)資料,特把一些關(guān)鍵點(diǎn)以及PHP編寫和讀取XML的一些實(shí)例整理出來,方便以后使用
    2013-01-01
  • php中RESTful API的使用方法詳解

    php中RESTful API的使用方法詳解

    RESTful API是一種軟件架構(gòu)風(fēng)格,它將資源(Resource)作為核心概念,并通過一組統(tǒng)一的接口對資源進(jìn)行操作,下面我們就來學(xué)習(xí)一下RESTful API在PHP中的具體使用吧
    2023-11-11
  • 配置支持SSI

    配置支持SSI

    配置支持SSI...
    2006-11-11
  • PHP7 preg_replace 出錯及解決辦法

    PHP7 preg_replace 出錯及解決辦法

    在本篇文章里小編給大家整理的是一篇關(guān)于PHP7 preg_replace 出錯及解決辦法,有需要的朋友們可以跟著學(xué)習(xí)下。
    2021-12-12
  • PHP判斷文件是否存在、是否可讀、目錄是否存在的代碼

    PHP判斷文件是否存在、是否可讀、目錄是否存在的代碼

    php判斷文件是否存在或是否可讀或目錄是否存在結(jié)合三個實(shí)例保證你能看懂,關(guān)于php操作文件這方面即基礎(chǔ)又很重要,在很多地方都需要php對文件進(jìn)行相應(yīng)的操作,所以你還是好好看看下面的內(nèi)容
    2012-10-10
  • 獲取遠(yuǎn)程文件大小的php函數(shù)

    獲取遠(yuǎn)程文件大小的php函數(shù)

    用php實(shí)現(xiàn)獲取遠(yuǎn)程文件大小的代碼,需要的朋友可以參考下。
    2010-01-01
  • PHP計(jì)數(shù)器的實(shí)現(xiàn)代碼

    PHP計(jì)數(shù)器的實(shí)現(xiàn)代碼

    本篇文章是對PHP計(jì)數(shù)器的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Laravel中正確地返回HTTP狀態(tài)碼方法示例

    Laravel中正確地返回HTTP狀態(tài)碼方法示例

    這篇文章主要給大家介紹了如何在Laravel中正確地返回HTTP狀態(tài)碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Laravel具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • PHP MSSQL 分頁實(shí)例

    PHP MSSQL 分頁實(shí)例

    這篇文章主要介紹了PHP MSSQL可刷新分頁實(shí)例,以及PHP+MSSQL通用分頁公式,感興趣的小伙伴們可以參考一下
    2016-04-04

最新評論

高州市| 舒兰市| 宣武区| 两当县| 旌德县| 汶川县| 齐河县| 霍山县| 宜川县| 恩施市| 广元市| 西安市| 丰镇市| 瑞金市| 中牟县| 安龙县| 巴青县| 贵德县| 葵青区| 乳源| 微博| 武邑县| 阿鲁科尔沁旗| 阳山县| 宣汉县| 扶风县| 东平县| 桂阳县| 于都县| 芷江| 专栏| 陇南市| 枞阳县| 离岛区| 远安县| 明溪县| 广宁县| 奈曼旗| 聂拉木县| 普安县| 沁水县|