一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php設計模式 State (狀態模式)

php設計模式 State (狀態模式)

2019-12-01 12:40PHP教程網 PHP教程

允許一個對象在其內部狀態改變時改變它的行為,對象看起來似乎修改了它所屬的類

狀態state模式是GOF23種模式中的一種,和命令模式一樣,也是一種行為模式。狀態模式和命令模式相當像,一樣是“接口—實現類”這種模式的應用,是面向接口編程原則的體現。 

狀態模式屬于對象創建型模式,其意圖是允許一個對象在其內部狀態改變時改變它的行為,對象看起來似乎修改了他的類。比較常見的例子是在一個表示網絡連接的類TCPConnection,一個TCPConnection對象的狀態處于若干不同的狀態之一:連接已經建立(Established),正在監聽,連接已經關閉(closed)。當一個TCPConnection對象收到其他對象的請求時,他根據自身的狀態作出不同的反應。 

例如:一個Open請求的結果依賴于該連接已關閉還是連接已建立狀態。State模式描述了TCPConnection如何在每一種狀態下表現出不同的行為。這一種模式的關鍵思想是引入了一個稱為TCPState的抽象類表示網絡的連接狀態,TCPState類為各種表示不同的操作狀態的字類聲明了一個公共接口。TCPState的子類實現與特定的狀態相關的行為。例如,TCPEstablished和TCPClosed類分別實現了特定于TCPConnection的連接已建立狀態和連接已關閉狀態的行為。 

舉例來說:一個人具有生氣,高興和抓狂等狀態,在這些狀態下做同一個事情可能會有不同的結果,一個人的心情可能在這三種狀態中循環轉變。使用一個moodState類表示一個人的心情,使用mad,Happy,Angry類代表不同的心情。 

先看一個例子: 

復制代碼代碼如下:


<?php 
/** 
* 狀態模式 

* 允許一個對象在其內部狀態改變時改變它的行為,對象看起來似乎修改了它所屬的類 

*/ 
interface State 

public function handle($state); 
public function display(); 

class Context 

private $_state = null; 
public function __construct($state) 

$this->setState($state); 

public function setState($state) 

$this->_state = $state; 

public function request() 

$this->_state->display(); 
$this->_state->handle($this); 


class StateA implements State 

public function handle($context) 

$context->setState(new StateB()); 

public function display() 

echo "state A<br/>"; 


class StateB implements State 

public function handle($context) 

$context->setState(new StateC()); 

public function display() 

echo "state B<br/>"; 


class StateC implements State 

public function handle($context) 

$context->setState(new StateA()); 

public function display() 

echo "state C<br/>"; 


// 實例化一下 
$objContext = new Context(new StateB()); 
$objContext->request(); 
$objContext->request(); 
$objContext->request(); 
$objContext->request(); 
$objContext->request(); 


狀態模式的理解,關鍵有2點: 

1. 通常命令模式的接口中只有一個方法。 而狀態模式的接口中有1個或者多個方法。而且,狀態模式的實現類的方法,一般返回值;或者是改變實例變量的值。也就是說,狀態模式一般和對象的狀態有關。實現類的方法有不同的功能,覆蓋接口中的方法。狀態模式和命令模式一樣,也可以用于消除if…else等條件選擇語句。 

2. 主要的用途是,作為實例變量,是一個對象引用。命令模式的主要的使用方式是參數回調模式。命令接口作為方法的參數傳遞進來。然后,在方法體內回調該接口。而狀態模式的主要使用方法,是作為實例變量,通過set屬性方法,或者構造器把狀態接口的具體實現類的實例傳遞進來。因此,可以這樣比較命令模式和狀態模式的異同。 

State模式和command模式都是十分常用,粒度比較小的模式,是很多更大型模式的一部分?;旧?,state模式和command模式是十分相似的。只要開發者心中對單例和多例有一個清醒的認識,即使不把它們分為兩種模式也沒事。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 小小水蜜桃3视频在线观看 小鸟酱喷水 | 亚洲国产精品日韩高清秒播 | 欧美vpswindowssex 欧美va在线高清 | 欧美色成人tv在线播放 | 亚洲国产精品久久网午夜小说 | beeg xxxx日本| 学校女性奴sm训练调教 | 午夜理论电影在线观看亚洲 | 草草免费观看视频在线 | 日本高清va不卡视频在线观看 | 5g在线观看 | 亚洲欧美日韩精品 | 爱操综合| 91制片厂制作传媒网站破解 | av中文字幕网免费观看 | re99热| 青青青草国产线观 | 精品久久看 | 欧美激情亚洲 | 亚洲网视频 | 摸进老太婆的裤裆小说 | 三上悠亚久久国产 | 韩国情事伦理片观看地址 | 成人看的羞羞视频免费观看 | 69日本xxxx| 毛片免费视频观看 | 忘忧草在线 | 熟睡中的麻麻大白屁股小说 | 黄 在线播放 | 校花在公车上被内射好舒 | 日韩成人精品 | 欧美性xxxxx 欧美性bbbbbxxxxxddd | 把女的下面扒开添视频 | boobsmilking流奶水野战 | 男同精品视频免费观看网站 | 男人天堂a | 日本中文字幕在线视频 | 超91精品手机国产在线 | 国产亚洲福利一区二区免费看 | videojapan日本孕交孕 | 欧美伊人久久久久久久久影院 |