首页 PHP 正文
252

设计模式之状态模式

状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。主要由以下几部分组成:
1、上下文环境类,它是状态的拥有者。同时它把行为委托给具体的状态类去执行。
2、抽象状态接口,统一接口,所有状态都要实现此接口。
3、具体状态类,负责不同状态的实现。
/**
*环境类
*/
class Context{
    public $stateFlag;
    private $state;
    
    public function setState(State $state){
        $this->state = $state;
    }
    
    public function request(){
        $this->state && $this->state->handle($this);
    }
}

/**
*抽象状态类
*/
abstract class State{
    
    public abstract function handle(Context $context);
}

/**
*状态A
*/
class ConcreteStateA extends State{
    public function handle(Context $context){
        if(1 == $context->stateFlag){
            echo 'State flag is 1, so do stateA action<br>';
        }else{
            $stateB = new ConcreteStateB();
            $context->setState($stateB);
            $context->request();
        }
    }
}

/**
*状态B
*/
class ConcreteStateB extends State{
    public function handle(Context $context){
        if(2 == $context->stateFlag){
            echo 'State flag is 2, so do stateB action<br>';
        }
    }
}

$context = new Context();
$context->stateFlag = 1;
$stateA = new ConcreteStateA();
$context->setState($stateA);
$context->request();
$context->stateFlag = 2;
$context->request();
状态模式可以将复杂的if-else判断分解到一个个类中去,比如上面的例子,如果用if else就相当于
$flag = 1;
if($flag == 1){
....
}else if($flag == 2){
....
}

正在加载评论...