head first design pattern等.现在举个例子说明之:
比如有一个系统,需要根据客户的积分来作一些处理,比如如果客户积分大于某个积分,对应的操作为有不同的话,则可以考虑使用状态模式.比如积分<100,100<积分<500,积分>500等时,它们都要执行同样的操作,比如展示信息给用户,但展示的内容不同,则这个时候可以考虑使用状态模式,代码如下
class point
{
//积分
public $point;
public function showTips()
{
//列出用户的积分
}
}
各个情况的子类继承之
//积分低于500的类
class Point500 extends Point
{
//显示提示
public function showTips()
{
echo "客户发帖等行为可以增加积分";
}
}
//积分大于500,低于1000的类
class Point600 extends Point
{
//显示提示
public function showTips()
{
echo "可以行使标准用户的权利";
}
//显示按钮
public function showButton()
{
echo "标准用户功能的按钮";
}
}
//应用类
class Context
{
//积分对象
public $pointObj;
//设置一个积分对象
public function setPointObj($point)
{
//低于500
if ($point<500) {
$this->pointObj = new Point500();
}
//大于500,低于1000
else {
$this->pointObj = new Point600();
}
}
提示
public function showTips()
{
$this->pointObj->showTips();
}
}
$context = new Context();
$context->setPointObj(780);
//显示提示
$context->showTips();