首页 后端开发 php教程 php设计模式 State (状态模式)_PHP

php设计模式 State (状态模式)_PHP

Jun 01, 2016 pm 12:15 PM
php设计模式 state 状态模式

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

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

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

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

先看一个例子:

复制代码 代码如下:
/**
* 状态模式
*
* 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它所属的类
*
*/
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点:

1. 通常命令模式的接口中只有一个方法。 而状态模式的接口中有1个或者多个方法。而且,状态模式的实现类的方法,一般返回值;或者是改变实例变量的值。也就是说,状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。状态模式和命令模式一样,也可以用于消除if…else等条件选择语句。

2. 主要的用途是,作为实例变量,是一个对象引用。命令模式的主要的使用方式是参数回调模式。命令接口作为方法的参数传递进来。然后,在方法体内回调该接口。而状态模式的主要使用方法,是作为实例变量,通过set属性方法,或者构造器把状态接口的具体实现类的实例传递进来。因此,可以这样比较命令模式和状态模式的异同。

State模式和command模式都是十分常用,粒度比较小的模式,是很多更大型模式的一部分。基本上,state模式和command模式是十分相似的。只要开发者心中对单例和多例有一个清醒的认识,即使不把它们分为两种模式也没事。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP中常用的设计模式及其实现方法 PHP中常用的设计模式及其实现方法 Jun 27, 2023 pm 01:08 PM

PHP是一种广泛使用且非常流行的编程语言。当今的Web应用程序中,PHP是非常重要的一部分。在开发PHP应用程序的过程中,设计模式起着至关重要的作用。设计模式是解决问题的一种模板,在不同的环境中可重复使用,帮助我们写出更好的代码,使代码更加可靠、可维护、可扩展。在本文中,我们将探讨一些PHP中常用的设计模式及其实现方法。单例模式单例模式是一种创建模式,它允许

react中state和props的区别有哪些? react中state和props的区别有哪些? Nov 17, 2020 pm 04:49 PM

区别:props是传递给组件的(类似于函数的形参),而state是在组件内部被组件自己管理的(类似于在一个函数内声明的变量)。state是组件自己管理数据,控制自己的状态,可变;props是外部传入的数据参数,不可变。

react有哪些方法改变state react有哪些方法改变state Jan 06, 2023 am 09:18 AM

react改变state的方法有:1、通过“this.setState({title:'React'});”方法修改state;2、通过“this.setState((preState, props)=>counter:preState.quantity+1)”方法修改state;3、通过“replaceState”方法改变组件的状态。

php有哪些设计模式 php有哪些设计模式 Jul 25, 2023 am 09:39 AM

php设计模式有:1、单例模式,确保一个类只有一个实例化对象;2、工厂模式,将对象的实例化过程封装在一个工厂类中;3、抽象工厂模式,是一种类似于工厂模式的创建对象的模式;4、观察者模式,实现对象之间的一对多依赖关系;5、适配器模式,将一个类的接口转换成另一个类的接口;6、装饰器模式,动态地给一个对象添加一些额外的功能;7、迭代器模式;8、策略模式;9、模板方法模式等等。

PHP7.0中的设计模式有哪些? PHP7.0中的设计模式有哪些? May 26, 2023 am 09:21 AM

随着技术的不断发展,设计模式在软件开发中变得越来越重要。PHP7.0作为最新的PHP版本,也集成了许多的设计模式。在本文中,我们将探讨PHP7.0中的设计模式,以帮助PHP程序员更好地理解和应用这些模式。单例模式单例模式是一种创建型模式,它确保一个类只有一个实例,并提供了一个全局访问点。在PHP7.0中,可以使用__construct方法和static方法来

PHP核心的设计模式与实践 PHP核心的设计模式与实践 Nov 08, 2023 pm 08:58 PM

PHP核心的设计模式与实践引言:设计模式是软件开发中常用的解决问题的模板,它们提供了一种可重用的解决方案,可以帮助我们在开发过程中遵循最佳实践和良好的软件设计原则。PHP作为一种广泛应用的编程语言,也有许多常见和有用的设计模式可以在核心开发中使用。本文将介绍几种常见的PHP设计模式,并提供相关的代码示例。一、单例模式(Singleton)单例模式是一种只允许

PHP中的设计模式在框架中的应用方法详解 PHP中的设计模式在框架中的应用方法详解 Jun 09, 2023 am 11:55 AM

PHP是一种广泛应用于Web开发领域的编程语言,而设计模式是一种被广泛使用于软件工程中的解决问题的方法。设计模式的应用能够提高软件的可扩展性、可维护性、可重用性等多个方面的性能,而且能够更快地完成任务和减少代码重复。在PHP中,常常使用设计模式来提高框架的性能,更好地组织和管理代码。因为框架需要处理大量的业务逻辑和复杂的业务流程,而设计模式则能够帮助开发人员

react更新state方法有哪些 react更新state方法有哪些 Nov 09, 2022 pm 03:31 PM

react更新state方法有:1、通过key变化子组件,代码如“”;2、利用ref父组件调用子组件函数;3、通过父级给子级传数据,子级只负责渲染。

See all articles