狀態(tài)模式屬于對象創(chuàng)建型模式,其意圖是允許一個對 " /> 免费看黄网站大全,第四色视频,欧美人成在线

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

php設(shè)計模式 State (狀態(tài)模式)

狀態(tài)state模式是GOF23種模式中的一種,和命令模式一樣,也是一種行為模式。狀態(tài)模式和命令模式相當(dāng)像,一樣是“接口―實(shí)現(xiàn)類”這種模式的應(yīng)用,是面向接口編程原則的體現(xiàn)。

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

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

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

先看一個例子:

復(fù)制代碼 代碼如下:
<?php
/**
* 狀態(tài)模式
*
* 允許一個對象在其內(nèi)部狀態(tài)改變時改變它的行為,對象看起來似乎修改了它所屬的類
*
*/
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/>";
}
}
// 實(shí)例化一下
$objContext = new Context(new StateB());
$objContext->request();
$objContext->request();
$objContext->request();
$objContext->request();
$objContext->request();

狀態(tài)模式的理解,關(guān)鍵有2點(diǎn):

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

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

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

php技術(shù)php設(shè)計模式 State (狀態(tài)模式),轉(zhuǎn)載需保留來源!

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

主站蜘蛛池模板: 久久精品国产99久久99久久久 | 岛国美女全棵写真视频在线观看 | 91不卡| 色多多免费视频观看区一区 | 九九视频精品在线 | 色老板免费观看在线播放 | 国色天香一区三区四区小说 | 国产小视频福利 | 在线视频 91| 好吊日在线观看 | 黄在线观看网站 | 最新香蕉97超级碰碰碰碰碰久 | 伊人久久大杳蕉综合大象 | 久久午夜夜伦伦鲁鲁片 | 国产精彩对白综合视频 | 国产人成精品 | 天天色综合5 | 在线视频观看一区 | 亚洲国产精品久久 | 久久夜色国产精品噜噜 | 91精品国产91久久久久久麻豆 | 久久国产成人精品国产成人亚洲 | 91视频精选 | 国产精品乱码免费一区二区 | 久久久久激情免费观看 | 国产成人盗摄精品 | 国产精品亚洲综合网站 | 久久国产欧美日韩高清专区 | 色五月在线视频 | 亚洲第一免费网站 | 欧洲视频在线观看 | 国产对白在线播放九色 | 国产成人精品综合网站 | 成人精品视频在线 | 夭天色综合 | 国产成人无精品久久久久国语 | 甘城光辉游乐园在线观看 | 色综合美国色农夫网 | 久久伊人精品热在75 | 欧美色黄| 国产成人亚洲欧美激情 |