php設計模式 State 狀態模式

2022-10-06 13:51:21 字數 1962 閱讀 9913

狀態state模式是gof23種模式中的一種,和命令模式一樣,也是一種行為模式。狀態模式和命令模式相當像,一樣是「介面—實現類」這種模式的應用,是面向介面程式設計原則的體現。

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

例如:乙個open請求的結果依賴於該連線已關閉還是連線已建立狀態。state模式描述了tcpconnection如何在每一種狀態下表現出不同的行為。這一種模式的關鍵思想是引入了乙個稱為tcpstate的抽象類表示網路的連線狀態,tcpstate類為各種表示不同的操作狀態的字類宣告了乙個公共介面。tcpstate的子類實現與特定的狀態相關的行為。例如,tcpestablished和tcpclosed類分別實現了特定於tcwww.cppcns.compconnectwww.cppcns.comion的連線已建立狀態和連線已關閉狀態的行為。

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

先看乙個例子:

複製** **如下:

php

/**

* 狀態模式

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

* */

inte***ce state

class context

public function setstate($state)

public function request() }

class statea implements state

public function display() }

class stateb implements state

public function display() }

class statec implements state

public function display() }

// 例項化一下

$objcontext = new context(new stateb());

$objcontext->request();

$objcontext->request();

$objcontext->request();

$objcontext->request();

$objcontext->request();

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

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

2. 主要的用途是,作為例項變數,是乙個物件引用。命令模式的主要的使用程式設計客棧方式是引數**模式。命令介面作為方法的引數傳遞進來。然後,在方法體內**該介面。而狀態模式的主要使用方法,是作為例項變數,通過set屬性方法,或者構造器把狀態介面的具體實現類的例項傳遞進來。因此,可以這樣比較命令模式和狀態模式的異同。

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

本文標題: php設計模式 state (狀態模式)

本文位址: /wangluo/php/82463.html

設計模式 狀態模式(State)

核心思想就是 當物件的狀態改變時,同時改變其行為。所以,狀態模式就兩點 1 可以通過改變狀態來獲得不同的行為。2 你的好友能同時看到你的變化。state類是個狀態類 這裡用dispenserstate 及實現類 public inte ce dispenserstate public class f...

設計模式 狀態模式(State)

一 狀態模式 state 定義 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類 理解 狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。二 狀態模式uml圖 3 context ...

設計模式 狀態模式State

允許乙個物件在內部改變它的狀態,並根據不同的狀態有不同的操作行為。例如,水在固體 液體 氣體是三種狀態,但是展現在我們面前的確實不同的感覺。通過改變水的狀態,就可以更改它的展現方式。應用場景 1 當乙個物件的行為,取決於它的狀態時 2 當類結構中存在大量的分支,並且每個分支內部的動作抽象相同,可以當...