Maison développement back-end tutoriel 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模式是十分相似的。只要开发者心中对单例和多例有一个清醒的认识,即使不把它们分为两种模式也没事。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Modèles de conception couramment utilisés en PHP et leurs méthodes de mise en œuvre Modèles de conception couramment utilisés en PHP et leurs méthodes de mise en œuvre Jun 27, 2023 pm 01:08 PM

PHP est un langage de programmation largement utilisé et très populaire. PHP est une partie très importante des applications Web actuelles. Les modèles de conception jouent un rôle essentiel dans le développement d'applications PHP. Le modèle de conception est un modèle pour résoudre des problèmes qui peut être réutilisé dans différents environnements. Il nous aide à écrire un meilleur code et à le rendre plus fiable, maintenable et évolutif. Dans cet article, nous explorerons certains modèles de conception couramment utilisés en PHP et comment les implémenter. Modèle Singleton Le modèle Singleton est un modèle de création qui permet

Quelles sont les différences entre l'état et les accessoires en réaction ? Quelles sont les différences entre l'état et les accessoires en réaction ? Nov 17, 2020 pm 04:49 PM

La différence : les props sont transmis au composant (similaire aux paramètres formels d'une fonction), tandis que l'état est géré au sein du composant lui-même (similaire à une variable déclarée dans une fonction). L'état est la gestion des données du composant et le contrôle de son propre état, qui est variable ; les accessoires sont les paramètres de données transmis de l'extérieur et sont immuables.

Quelles sont les méthodes de réaction au changement d'état ? Quelles sont les méthodes de réaction au changement d'état ? Jan 06, 2023 am 09:18 AM

Les méthodes pour réagir pour changer l'état sont : 1. Modifier l'état via la méthode "this.setState({title:'React'});" 2. Modifier l'état via la méthode "this.setState((preState, props); )=>counter:preState.quantity+ 1)" méthode pour modifier l'état ; 3. Changer l'état du composant via la méthode "replaceState".

Quels sont les modèles de conception en php ? Quels sont les modèles de conception en php ? Jul 25, 2023 am 09:39 AM

Les modèles de conception PHP incluent : 1. le mode Singleton, qui garantit qu'une classe n'a qu'un seul objet instancié ; 2. le mode Factory, qui encapsule le processus d'instanciation de l'objet dans une classe factory ; 3. le mode factory abstrait, qui est similaire à un mode usine ; Modèle d'usine pour créer des objets 4. Modèle d'observateur, réalisant des dépendances un à plusieurs entre les objets 5. Modèle d'adaptateur, convertissant l'interface d'une classe en interface d'une autre classe 6. Modèle de décorateur, ajouter dynamiquement quelques fonctions supplémentaires à ; un objet ; 7. Modèle d'itérateur ; 8. Modèle de stratégie ; 9. Modèle de méthode de modèle, etc.

Quels sont les modèles de conception dans PHP7.0 ? Quels sont les modèles de conception dans PHP7.0 ? May 26, 2023 am 09:21 AM

Avec le développement continu de la technologie, les modèles de conception deviennent de plus en plus importants dans le développement de logiciels. En tant que dernière version de PHP, PHP7.0 intègre également de nombreux modèles de conception. Dans cet article, nous explorerons les modèles de conception de PHP7.0 pour aider les programmeurs PHP à mieux comprendre et appliquer ces modèles. Modèle Singleton Le modèle singleton est un modèle de création qui garantit qu'une classe n'a qu'une seule instance et fournit un point d'accès global. En PHP7.0, vous pouvez utiliser la méthode __construct et la méthode statique pour

Modèles et pratiques de conception de base PHP Modèles et pratiques de conception de base PHP Nov 08, 2023 pm 08:58 PM

Introduction aux modèles et pratiques de conception de base PHP : les modèles de conception sont des modèles de résolution de problèmes couramment utilisés dans le développement de logiciels. Ils fournissent une solution réutilisable qui peut nous aider à suivre les meilleures pratiques et les bons principes de conception de logiciels pendant le processus de développement. En tant que langage de programmation largement utilisé, PHP possède également de nombreux modèles de conception communs et utiles qui peuvent être utilisés dans le développement de base. Cet article présentera plusieurs modèles de conception PHP courants et fournira des exemples de code pertinents. 1. Mode Singleton (Singleton) Le mode Singleton est un type qui permet uniquement

Explication détaillée de la façon d'appliquer des modèles de conception dans les frameworks PHP Explication détaillée de la façon d'appliquer des modèles de conception dans les frameworks PHP Jun 09, 2023 am 11:55 AM

PHP est un langage de programmation largement utilisé dans le domaine du développement Web, et les modèles de conception sont une méthode de résolution de problèmes largement utilisée en génie logiciel. L'application de modèles de conception peut améliorer les performances des logiciels sous de nombreux aspects tels que l'évolutivité, la maintenabilité et la réutilisabilité, et peut effectuer des tâches plus rapidement et réduire la duplication de code. En PHP, les modèles de conception sont souvent utilisés pour améliorer les performances du framework et mieux organiser et gérer le code. Étant donné que le framework doit gérer une grande quantité de logique métier et de processus métier complexes, les modèles de conception peuvent aider les développeurs

Quelles sont les méthodes pour réagir à l'état de mise à jour ? Quelles sont les méthodes pour réagir à l'état de mise à jour ? Nov 09, 2022 pm 03:31 PM

Les méthodes d'état de mise à jour de réaction sont : 1. Modifiez le sous-composant via une clé, un code tel que "<Children key={this.state.key} a={this.state.a} b={this.state.b} /> "; 2. Utilisez le composant parent ref pour appeler la fonction du composant enfant ; 3. Transmettez les données à l'enfant via le parent, et l'enfant est uniquement responsable du rendu.

See all articles