状态模式 php
状态模式当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
interface State{
public function handle(Context $context);
}
class ConcreteStateA implements State{
private static $instance = null;
private function __construct()
{
}
public static function getInstance()
{
if(is_null(self::$instance)){
self::$instance = new self();
}
return self::$instance;
}
public function handle(Context $context)
{
var_dump("cs A");
$context->setState(ConcreteStateB::getInstance());
}
}
class ConcreteStateB implements State{
private static $instance = null;
private function __construct()
{
}
public static function getInstance()
{
if(is_null(self::$instance)){
self::$instance = new self();
}
return self::$instance;
}
public function handle(Context $context)
{
var_dump("cs B");
$context->setState(ConcreteStateA::getInstance());
}
}
class Context{
private $state;
public function __construct()
{
$this->state = ConcreteStateA::getInstance();
}
public function setState(State $state)
{
$this->state = $state;
}
public function request()
{
$this->state->handle($this);
}
}
$context = new Context();
$context->request();
$context->request();
$context->request();
$context->request();
string(4) "cs A"
string(4) "cs B"
string(4) "cs A"
string(4) "cs B"