行为型模式,状态模式
分类:高并发

状态state模式是GOF23种模式中的一种,和命令模式一样,也是一种行为模式。状态模式和命令模式相当像,一样是“接口—实现类”这种模式的应用,是面向接口编程原则的体现。

如果按照一般的思路,每次我们对一个小兵进行操作的时候,比如一辆坦克,我们都要用if判断他的状态,这样代码中会有很多的if,else或者swith。

本文由 伯乐在线 - Justin(李加庆) 翻译。未经许可,禁止转载!
英文出处:kamranahmedse。欢迎加入翻译组。

状态模式属于对象创建型模式,其意图是允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了他的类。比较常见的例子是在一个表示网络连接的类TCPConnection,一个TCPConnection对象的状态处于若干不同的状态之一:连接已经建立(Established),正在监听,连接已经关闭(closed)。当一个TCPConnection对象收到其他对象的请求时,他根据自身的状态作出不同的反应。

不过我们可以发现,我们需要的是他在某个状态下的行为,如果把这些行为按照状态封装起来,就可以减少大量的判断。

用最简单的语言,解释设计模式。

例如:一个Open请求的结果依赖于该连接已关闭还是连接已建立状态。State模式描述了TCPConnection如何在每一种状态下表现出不同的行为。这一种模式的关键思想是引入了一个称为TCPState的抽象类表示网络的连接状态,TCPState类为各种表示不同的操作状态的字类声明了一个公共接口。TCPState的子类实现与特定的状态相关的行为。例如,TCPEstablished和TCPClosed类分别实现了特定于TCPConnection的连接已建立状态和连接已关闭状态的行为。

待解决的问题:封装坦克的状态,让状态自己去控制行为。

虽然示例代码是用 PHP7 实现的,但因为概念是一样的,所以语言并不会阻碍大家理解设计模式。

举例来说:一个人具有生气,高兴和抓狂等状态,在这些状态下做同一个事情可能会有不同的结果,一个人的心情可能在这三种状态中循环转变。使用一个moodState类表示一个人的心情,使用mad,Happy,Angry类代表不同的心情。

思路:把状态作为属性,兵种类本身只控制状态的变化,具体的行为由状态类定义。

  • 《人人都能读懂的设计模式(1):创建型模式》
  • 《人人都能读懂的设计模式(2):结构型模式》

先看一个例子:

状态(State)模式示例:

概述

行为型设计模式关心对象之间的责任分配。与结构型设计模式不同的是,行为型设计模式不仅仅指定结构,而且还概述了它们之间的消息传递/通信的模式。或者换句话说,行为型模式帮助回答了“软件组件是如何运行的?”

复制代码 代码如下:
/**
* 状态模式
*
* 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它所属的类
*
*/
interface State
{
public function handle($state);
public function display();
}
class Context
{
private $_state = null;
public function __construct($state)
{
$this->setState($state);
}
public function setState($state)
{
$this->_state = $state;
}
public function request()
{
$this->_state->display();
$this->_state->handle($this);
}
}
class StateA implements State
{
public function handle($context)
{
$context->setState(new StateB());
}
public function display()
{
echo "state A
";
}
}
class StateB implements State
{
public function handle($context)
{
$context->setState(new StateC());
}
public function display()
{
echo "state B
";
}
}
class StateC implements State
{
public function handle($context)
{
$context->setState(new StateA());
}
public function display()
{
echo "state C
";
}
}
// 实例化一下
$objContext = new Context(new StateB());
$objContext->request();
$objContext->request();
$objContext->request();
$objContext->request();
$objContext->request();

 代码如下

维基百科

在软件工程中,行为型设计模式为设计模式的一种类型,用来识别对象之间的常用交流模式并加以实现。如此,可以在交流时增强灵活性。

分类

  • 责任链模式
  • 命令模式
  • 迭代器模式
  • 中介者模式
  • 备忘录模式
  • 观察者模式
  • 访问者模式
  • 策略模式
  • 状态模式
  • 模板方法模式

状态模式的理解,关键有2点:

<?php

本文由10bet手机官网发布于高并发,转载请注明出处:行为型模式,状态模式

上一篇:没有了 下一篇:装饰模式,PHP设计模式之责任链模式的深入解析_php技巧_脚本之家
猜你喜欢
热门排行
精彩图文