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: 几乎一致 看不出来什么
- 行为: 策略模式一般都是相同行为,状态不同行为。
- 返回微信支付参数,实现各种订单的支付参数,行为都是返回微信支付参数
- 订单失败 与 订单成功行为不一致。
- 改变: 我看不出来有什么
(其实我甚至都想认为 他们是同一个模式)