Cet article présente principalement la définition et l'utilisation du mode état en PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
DéfinitionModè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'étatRôle d'état abstrait (État) : Définir une interface ou une classe abstraite State pour encapsuler le comportement correspondant à un état spécifique de l'objet environnement
Rôle Concrete State (ConcreteState) : Chaque classe d'état implémente un état de l'environnement (Context) Comportement correspondant
Rôle Context : définissez l'interface qui intéresse le client et conservez 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'utilisationConsidérez l'application d'un système de vote en ligne, pour contrôler que le même utilisateur ne puisse lancer que un vote, 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 utiliser le. Mode d'état pour mettre en œuvre, tout d'abord, les différents états du processus de vote doivent être définis, selon la description ci-dessus, il peut être grossièrement divisé en quatre états : vote normal, vote malveillant et vote sur liste noire. Créez ensuite un objet de gestion des votes (équivalent au 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);
Statut de révision Modèle
État et comportementLe soi-disant é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 ; mappé aux méthodes
La fonction du mode état est de séparer le comportement de l'état et d'appeler les fonctions correspondant aux différents états en maintenant les changements dans l'é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 un objet qui détient l'état, mais l'environnement lui-même ne gère pas le comportement lié à l'état, mais gère l'état. La fonction 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. envisagez d'utiliser des classes abstraites au lieu d'interfaces, ce qui peut être plus pratique Passage de paramètres
Le client n'interagit 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
Résumé : Ce qui précède est l'intégralité du contenu de cet article, je j'espère que cela pourra aider l'apprentissage de chacun.
Recommandations associées :
PHP implémentation de tableaux Explication détaillée des méthodes de déduplication
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!