Qu'est-ce que la programmation en mode état PHP ? Cet article présente principalement l'explication détaillée de la programmation en mode état en PHP, qui est propice à la programmation en collaboration en équipe, j'espère qu'elle sera utile à tout le monde.
Définition
Modèle d'état, également connu sous le nom de modèle d'objets pour l'état, le modèle d'état est le modèle de comportement des objets. Le modèle d'état permet à un objet de modifier son comportement lorsque son état interne change. Cet objet semble avoir changé de classe
Diagramme UML
Rôle principal dans le modèle d'état
Rôle d'état abstrait (State) : Définir une interface ou une classe abstraite State pour encapsuler le comportement correspondant à un état spécifique de l'objet d'environnement
Rôle d'état concret (ConcreteState) : Chaque classe d'état implémente l'environnement Comportement correspondant à un état de ( Contexte)
Rôle Environnement (Contexte) : Définir l'interface qui intéresse le client et conserver une instance d'une classe d'état spécifique. Une instance de cette classe d'état spécifique donne l'état actuel de cet objet d'environnement
Scénario d'utilisation
Considérons une application d'un système de vote en ligne pour contrôler le même utilisateur, Votez uniquement. Si un utilisateur vote à plusieurs reprises et vote plus de 5 fois, cela sera considéré comme un brossage de vote malveillant. Si un utilisateur vote plus de 8 fois, il doit être ajouté à la liste noire
Pour. utilisez le mode état pour mettre en œuvre, tout d'abord, le processus de vote doit être Différents états sont définis et peuvent être grossièrement divisés en quatre états selon la description ci-dessus : vote normal, vote malveillant et vote sur liste noire. Créez ensuite un objet de gestion des votes (équivalent à Contexte)
Schéma UML
Exemple de code
<?php /** * 抽象状态类 * @author wzy * */ interface VoteState { /** * 需要实现的公共方法 */ public function vote (); } /** * 具体状态——正常投票 * * @author wzy * */ class NormalVoteState implements VoteState { public function vote () { echo "这是一个正常投票!"; } } /** * 具体状态——恶意投票 * * @author wzy * */ class RepeatVoteState implements VoteState { public function vote () { echo "这是一个恶意投票!"; } } /** * 具体状态——黑名单投票 * * @author wzy * */ class BlockVoteState implements VoteState { public function vote () { echo "这是一个黑名单投票!"; } } /** * Context角色 */ class VoteManager { /** * 投票数量 * * @var int */ private $vote_count; /** * 状态类实例 * * @var object */ private $voteInstance; /** * 构造函数,初始化成员属性 * * @param int $count */ public function __construct ($count = 1) { $this->vote_count = $count; } /** * 客户端调用的接口函数 */ public function setState ($count) { if (! is_null($count)) { $this->vote_count = $count; } if ($this->vote_count < 5) { $this->voteInstance = new NormalVoteState(); } else if ($this->vote_count < 8) { $this->voteInstance = new RepeatVoteState(); } else { $this->voteInstance = new BlockVoteState(); } $this->voteInstance->vote(); } } /** * 模拟客户端操作 */ $object = new VoteManager(); $object->setState(1); echo "<br>"; $object->setState(6); echo "<br>"; $object->setState(10);
Vérification du mode d'état
Statut et comportement
Donc -appelé L'état d'un objet fait généralement référence à la valeur de l'attribut de l'instance d'objet ; et le comportement fait référence à la fonction de l'objet. Pour être plus précis, la plupart des comportements peuvent être mappés à des méthodes
Le. La fonction du modèle d'état est de séparer les états. Les comportements appellent des fonctions correspondant à différents états en maintenant les changements d'état. En d'autres termes, l'état et le comportement sont liés, et leur relation peut être décrite comme : l'état détermine le comportement
Puisque l'état est modifié pendant l'exécution, le comportement changera également en fonction du changement d'état pendant l'exécution.
Objets d'environnement et de traitement d'état
Dans le modèle d'état, l'environnement (Contexte) est l'objet qui détient l'état, mais l'environnement lui-même ne gère pas les comportements liés à l'état, mais La fonction de traitement de l'état est déléguée à la classe de traitement d'état correspondant à l'état
Dans un traitement d'état spécifique, il est souvent nécessaire d'obtenir les données de l'environnement (Contexte) lui-même. des classes abstraites au lieu d'interfaces, qui peuvent Il sera plus pratique de passer des paramètres
Les clients n'interagissent généralement qu'avec l'environnement (Contexte). Le client peut utiliser l'objet d'état pour configurer un environnement (Contexte). Une fois la configuration terminée, il n'a plus besoin de gérer l'objet d'état. Le client n'est généralement pas responsable du maintien de l'état pendant l'exploitation, ni de l'objet de traitement d'état spécifique qui est utilisé par la suite
Recommandations associées :
Modèles de conception PHP Modèle d'usine simple
La différence entre le modèle d'usine et le modèle Singleton dans le modèle de conception PHP
Polymorphisme PHP et liaison dynamique
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!