狀態模式屬于對象創建型模式,其意圖是允許一個對 " /> 久久久精品成人免费看,男人团apk,丰满人妻按磨HD

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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

狀態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模式是十分相似的。只要開發者心中對單例和多例有一個清醒的認識,即使不把它們分為兩種模式也沒事。

php技術php設計模式 State (狀態模式),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产精品亚洲精品久久国语 | 国内精品久久 | 色婷婷激婷婷深爱五月小蛇 | 国内精品视频在线播放一区 | 亚洲色婷婷久久精品AV蜜桃久久 | 琉璃美人煞在线观看 | 亚洲精品视频在线观看视频 | 巨胸美乳中文在线观看 | 久久精品热99看二 | 超碰97超碰在线视频哦 | 蜜芽在线播放免费人成日韩视频 | 手机观看毛片 | 内射少妇36P九色 | 伊人久久青草 | 国产亚洲视频在线播放香蕉 | 狠狠插狠狠干 | 国产成人免费全部网站 | 乱码午夜-极品国产内射 | 99综合之综合久久伊人 | 一本之道高清www在线观看 | 海角国精产品一区一区三区糖心 | 免费人妻无码AV不卡在线 | 秋霞电影院午夜伦高清 | 色狠狠色综合吹潮 | 亚洲精品AV一二三区无码 | 成人小视频在线免费观看 | 亚洲成熟人网站 | 九九热伊人 | 久久久精品3d动漫一区二区三区 | 向日葵视频app下载18岁以下勿看 | 日本精品在线观看视频 | 乳色吐息在线观看全集免费观看 | 精品久久久无码21P发布 | 久久午夜夜伦鲁鲁片无码免费 | 女人十八毛片水真多啊 | 久久国产精品无码视欧美 | YELLOW高清视频免费观看 | 人妻少妇偷人精品无码洋洋AV | 又黄又湿免费高清视频 | 神马影院在线eecss伦理片 | 无码国产成人午夜在线观看不卡 |