2.20. 状态模式(State)
定义
- 基于一个对象的同种事务而封装出不同的行为
 - 运行时可以改变自身行为
 
uml

代码实现
<?php
abstract class StateOrder
{
    //状态
    protected $stateInstance;
    abstract public function handle();
}
class SuccessOrder extends StateOrder {
    public function handle()
    {
        return "订单完成 ...";
    }
}
class FailOrder extends StateOrder {
    public function handle()
    {
        return "订单失败 抛出异常";
    }
}
class ContextOrder extends StateOrder {
    public function setState(StateOrder $stateInstance)
    {
        $this->stateInstance = $stateInstance;
    }
    public function handle()
    {
        return $this->stateInstance->handle();
    }
}
$context = new ContextOrder();
//成功
$context->setState(new SuccessOrder());
echo $context->handle();
//失败
$context->setState(new FailOrder());
echo $context->handle();
//运行结果:
订单完成 ...订单失败 抛出异常
策略模式区别
我查了挺久了,但是都没有我想要的答案,下面是我总结的。
- uml: 几乎一致 看不出来什么
 - 行为: 策略模式一般都是相同行为,状态不同行为。
- 返回微信支付参数,实现各种订单的支付参数,行为都是返回微信支付参数
 - 订单失败 与 订单成功行为不一致。
 
 - 改变: 我看不出来有什么
 
(其实我甚至都想认为 他们是同一个模式)
          
php设计模式学习
            
            
                关于 LearnKu
              
                    
                    
                    
 
推荐文章: