Maison > développement back-end > tutoriel php > Définition et utilisation du modèle d'état en PHP

Définition et utilisation du modèle d'état en PHP

墨辰丷
Libérer: 2023-03-30 13:38:01
original
1834 Les gens l'ont consulté

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

2015811162847657.jpg (454×146)

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'utilisation
Considé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

2015811165624664.jpg (467×164)

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);
Copier après la connexion

Statut de révision Modèle
État et comportement
Le 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 :

Comment utiliser FTP pour implémenter les fonctions de téléchargement et de téléchargement de fichiers en PHP

PHP implémentation de tableaux Explication détaillée des méthodes de déduplication

Explication détaillée des méthodes couramment utilisées pour les opérations de transaction PHP mysqli

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal