Heim >Backend-Entwicklung >PHP-Tutorial >PHP-State-Mode-Programmierung

PHP-State-Mode-Programmierung

*文
*文Original
2017-12-27 14:17:141603Durchsuche

Was ist PHP-State-Mode-Programmierung? In diesem Artikel wird hauptsächlich die detaillierte Erklärung der Zustandsmodusprogrammierung in PHP vorgestellt, die der Teamzusammenarbeitsprogrammierung förderlich ist. Ich hoffe, dass sie für alle hilfreich ist.

Definition
Zustandsmuster, auch bekannt als Muster von Objekten für Zustand, Zustandsmuster ist das Verhaltensmuster von Objekten. Das Zustandsmuster ermöglicht es einem Objekt, sein Verhalten zu ändern, wenn sich sein interner Zustand ändert. Dieses Objekt sieht aus, als hätte es seine Klasse geändert

UML-Diagramm

2015811162847657.jpg (454×146)

Hauptrolle im Zustandsmuster
Abstrakte Statusrolle (State): Definieren Sie eine Schnittstelle oder einen abstrakten Klassenstatus, um das Verhalten zu kapseln, das einem bestimmten Status des Umgebungsobjekts entspricht.
Konkrete Statusrolle (ConcreteState): Jede Statusklasse implementiert das Umgebungsverhalten, das einem Status von ( Kontext)
Umgebungsrolle (Kontext): Definieren Sie die Schnittstelle, an der der Client interessiert ist, und behalten Sie eine Instanz einer bestimmten Zustandsklasse bei. Eine Instanz dieser spezifischen Zustandsklasse gibt den aktuellen Zustand dieses Umgebungsobjekts an


Verwendungsszenario
Betrachten Sie eine Anwendung eines Online-Abstimmungssystems, um denselben Benutzer zu steuern. Geben Sie nur eine Stimme ab. Wenn ein Benutzer mehr als 5 Mal abstimmt, wird dies als böswilliges Vote-Brushing gewertet. Wenn ein Benutzer mehr als 8 Mal abstimmt, muss er zur schwarzen Liste hinzugefügt werden Verwenden Sie den Statusmodus, um zunächst den Abstimmungsprozess zu implementieren. Es werden verschiedene Zustände definiert, die gemäß der obigen Beschreibung grob in vier Zustände unterteilt werden können: normale Abstimmung, böswillige Abstimmung und Blacklist-Abstimmung. Erstellen Sie dann ein Abstimmungsverwaltungsobjekt (entspricht Kontext)

UML-Diagramm



2015811165624664.jpg (467×164)Beispielcode


 <?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);


Statusmodus überprüfen

Status und Verhalten
So -genannt Der Zustand eines Objekts bezieht sich normalerweise auf den Wert des Attributs der Objektinstanz. Genauer gesagt können die meisten Verhaltensweisen auf Methoden abgebildet werden Die Funktion des Zustandsmusters besteht darin, die Zustandsverhaltensaufruffunktionen zu trennen, die verschiedenen Zuständen entsprechen, indem Zustandsänderungen beibehalten werden. Mit anderen Worten, Zustand und Verhalten hängen zusammen, und ihre Beziehung kann wie folgt beschrieben werden: Der Zustand bestimmt das Verhalten
Da sich der Zustand während der Laufzeit ändert, ändert sich auch das Verhalten entsprechend der Zustandsänderung während der Laufzeit

Umgebungs- und Zustandsverarbeitungsobjekte

Im Zustandsmuster ist die Umgebung (Kontext) das Objekt, das den Zustand hält, aber die Umgebung selbst verarbeitet keine zustandsbezogenen Verhaltensweisen. aber Die Funktion der Statusverarbeitung wird an die dem Status entsprechende Statusverarbeitungsklasse delegiert. Bei der spezifischen Statusverarbeitung ist es häufig erforderlich, die Daten der Umgebung (Kontext) selbst abzurufen abstrakte Klassen anstelle von Schnittstellen, was möglicherweise bequemer ist, Parameter zu übergeben

Clients interagieren im Allgemeinen nur mit der Umgebung (Kontext). Der Client kann das Statusobjekt zum Konfigurieren einer Umgebung (Kontext) verwenden. Sobald die Konfiguration abgeschlossen ist, muss er sich nicht mehr mit dem Statusobjekt befassen. Der Kunde ist in der Regel nicht für die Zustandserhaltung während des Betriebs verantwortlich und auch nicht dafür verantwortlich, welches bestimmte Zustandsverarbeitungsobjekt anschließend verwendet wird

Verwandte Empfehlungen:


PHP Design Patterns Simple Factory Pattern

Der Unterschied zwischen Factory Pattern und Singleton Pattern im PHP Design Pattern

PHP-Polymorphismus und dynamische Bindung

Das obige ist der detaillierte Inhalt vonPHP-State-Mode-Programmierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn