2.20. 状态模式(State)

未匹配的标注

定义

  1. 基于一个对象的同种事务而封装出不同的行为
  2. 运行时可以改变自身行为

uml

PHP

代码实现


<?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();

//运行结果:
订单完成 ...订单失败 抛出异常

策略模式区别

我查了挺久了,但是都没有我想要的答案,下面是我总结的。

  1. uml: 几乎一致 看不出来什么
  2. 行为: 策略模式一般都是相同行为,状态不同行为。
    1. 返回微信支付参数,实现各种订单的支付参数,行为都是返回微信支付参数
    2. 订单失败 与 订单成功行为不一致。
  3. 改变: 我看不出来有什么

(其实我甚至都想认为 他们是同一个模式)

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~