今天學習的是
狀態模式(state)
,一種行為型模式。
狀態模式從**結構上分析有點和職責鏈模式相似,每個狀態有自己的上限,一旦超出會成為另一種狀態。
狀態模式的定義:允許乙個物件在其內部狀態改變時改變它的行為。
而狀態模式就是分離物件的狀態,封裝到專門的狀態類中。
優點是,把各個狀態分離開,便於橫向擴充套件,靈活性高。
如果光學習概念其實比較抽象,下面舉乙個實用的小例子:
所有做過網際網路**的公司都知道,消費會有積分,而積分的大小決定了該名會員的等級。
等級比方說有:**,鉑金,鑽石之類的。
**如下:
<?php
header("content-type:text/html;charset=utf-8");
require_once "state.php";
$state = new state();
// 積分為 500的時候
$state->score = 500;
$state->grade();
// 積分為1000的時候
$state->score = 1000;
$state->grade();
// 積分為10000的時候
$state->score = 100000;
$state->grade();
<?php
// 狀態介面
inte***ce istate
// 等級**
class golden implements istate
點積分,**會員
";
} else
} }
// 等級鉑金
class platinum implements istate
點積分,鉑金會員
";
} else
}
}
// 等級鑽石
class diamond implements istate
點積分,鉑金會員
";
} }
}
// 統一狀態類
class state
/**
* 設定下級等級
* @access public
* @param object $s
*/
function setstate(istate $s)
/**
* 顯示等級
* @access public
*/
function grade()
}
輸出結果:
500點積分,**會員
1000點積分,鉑金會員
100000點積分,鉑金會員
PHP設計模式 狀態模式
宣告 本系列部落格參考資料 大話設計模式 作者程杰。狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是 當控制乙個物件狀態的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把複雜的判斷邏輯簡化。uml類圖 角色 上下...
PHP設計模式 狀態模式
狀態設計模式是gof提出的最吸引人的模式之一,也是一種最有用的模式。遊戲通常就採用狀態模式,因為遊戲中的物件往往會非常頻繁地改變狀態。狀態模式的作用就是允許物件在狀態改變時改變其行為。還有很多其他模擬應用 不一定是遊戲 也依賴於狀態模式。本文將會談到並舉例說明。按照傳統思維,如果有多個狀態的話一般就...
php與設計模式 狀態模式
當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把複雜的判斷邏輯簡化。demo created by phpstorm 狀態介面 inte ce istat...