2018/12/07《大话设计模式》状态模式

Posted 25-lh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018/12/07《大话设计模式》状态模式相关的知识,希望对你有一定的参考价值。

 

《 Forever 吴建豪》洗脑~

 

1:什么是状态模式?

  - 定义:当一个对象的内在状态改变时,允许改变其行为,这个对象看起开像是改了其类。

  - 哎~又来了句让人听不明白的定义......

  - 看一段代码来理解吧

class A {
    private $state;

    public function __construct($state)
    {
        $this->state = $state;
    }

    public function echo()
    {
        if ($this->state == A) {
            echo A;
        } elseif ($this->state == B) {
            echo B;
        } elseif (...) {
            // 其他状态
        }
        else {
            echo xx!;
        }
    }
}

  - 这里可以说,当 state 的状态改变时候,会改变整个类行为。

  - 为了改变这个状况,从而使用状态模式,把每个条件的逻辑移到不同的类中,通过统一的接口定义

 

2:简单实现一个状态模式

<?php

interface State()
{
    public function handle(Context $context);
}

// 状态A
class StateA implements State
{
    public function handle(Context $context)
    {
        if ($context->term = 1) {
            // 处理逻辑,并终止程序
        } else {
            $context.setState(new StateB());
        }
    }
}

// 状态B
class StateB implements State
{
    public function handle(Context $context)
    {
        if ($context->term = 2) {
            // 处理逻辑,并终止程序
        } else {
            $context.setState(new StateC());
        }
    }
}

// 状态C
class StateC implements State
{
    public function handle(Context $context)
    {
        // 如果还有其他状态,则继续往下走。如果没有,就在次终止程序
    }
}


// 新的Context类的实现
class Context
{
    private $state;// 用来保存 State 对象

    public function setState(State $state)
    {
        $this->state = $state;
    }

    public function request()
    {
        $this->state->handle($this);
    }
}

 

3:应用场景

  - 如果项目中存在太多的 if {...} elseif {...} else {...} 。那么你应该考虑状态模式。我觉得这个是重点考虑对象

  - 如果每个状态中处理的业务逻辑特别复杂·那么建议考虑这种方式。

  - 如果代码中的状态相对固定。比如一个电商中购买商品的流程:未支付、已过期、待发货(已支付)、已发货、已收货。那么这种状态基本上定下来不会有太大变化,状态发生在内部中,顺序固定,不需要客户端进行处理。

   

4:参考

https://blog.csdn.net/hel12he/article/details/51787539

以上是关于2018/12/07《大话设计模式》状态模式的主要内容,如果未能解决你的问题,请参考以下文章

大话设计模式-状态模式(大鸟和小菜Java版)

大话设计模式读书笔记--12.状态模式

大话设计模式—状态模式

大话设计模式读书笔记--23.访问者模式

&lt;十二&gt;读&lt;&lt;大话设计模式&gt;&gt;之状态模式

大话设计模式之状态模式