Heim  >  Artikel  >  Backend-Entwicklung  >  Definition und Verwendung von Zustandsmustern in PHP

Definition und Verwendung von Zustandsmustern in PHP

墨辰丷
墨辰丷Original
2018-06-07 15:17:511822Durchsuche

Dieser Artikel stellt hauptsächlich die Definition und Verwendung des Zustandsmodus in PHP vor. Ich hoffe, dass er für alle hilfreich ist.

DefinitionZustandsmuster, 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 ZustandsmusterAbstrakte Zustandsrolle (Zustand) : Definieren Sie eine Schnittstelle oder einen abstrakten Klassenstatus, um das Verhalten zu kapseln, das einem bestimmten Status des Umgebungsobjekts entspricht.
Rolle des konkreten Status (ConcreteState): Jede Statusklasse implementiert einen Status der Umgebung (Kontext). Entsprechendes Verhalten
Umgebung ( Kontextrolle: 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 die Anwendung eines Online-Abstimmungssystems, um zu steuern, dass derselbe Benutzer nur abgeben kann Wenn ein Benutzer wiederholt und mehr als fünf Mal abstimmt, wird dies als böswilliges Vote-Brushing gewertet. Wenn ein Benutzer mehr als acht Mal abstimmt, muss er zur schwarzen Liste hinzugefügt werden

Um das zu verwenden Um den Zustandsmodus zu implementieren, müssen zunächst die verschiedenen Zustände des Abstimmungsprozesses definiert werden. Gemäß der obigen Beschreibung kann er grob in vier Zustände unterteilt werden: 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);

Review State Pattern
Zustand und Verhalten
Der sogenannte Zustand eines Objekts bezieht sich normalerweise auf den Wert des Attributs der Objektinstanz; genauer gesagt, die meisten Verhaltensweisen können zugeordnet werden Methoden

Die Funktion des Zustandsmodus besteht darin, das Verhalten des Zustands zu trennen und die Funktionen aufzurufen, die verschiedenen Zuständen entsprechen, indem Änderungen im Zustand 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 Zustandsmodus ist die Umgebung (Kontext) ein Objekt, das den Zustand hält, aber die Umgebung selbst verarbeitet nicht das mit dem Zustand verbundene Verhalten, sondern Behandelt den Zustand. Die Funktion des Zustands wird an die dem Zustand entsprechende Zustandsverarbeitung delegiert. Bei der spezifischen Zustandsverarbeitung ist es häufig erforderlich, die Daten der Umgebung (Kontext) selbst abzurufen Erwägen Sie die Verwendung abstrakter Klassen anstelle von Schnittstellen, was möglicherweise praktischer ist. Übergabe von Parametern

Der Client interagiert 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 normalerweise nicht für die Aufrechterhaltung des Zustands während des Betriebs verantwortlich und auch nicht dafür, welches bestimmte Zustandsverarbeitungsobjekt anschließend verwendet wird

Zusammenfassung

: Das Obige ist der gesamte Inhalt dieses Artikels, I Ich hoffe, es kann helfen. Das Lernen aller hilft.

Verwandte Empfehlungen:

So verwenden Sie FTP, um Datei-Upload- und Download-Funktionen in PHP zu implementieren

PHP Implementierung von Arrays Detaillierte Erläuterung der Deduplizierungsmethoden

Detaillierte Erläuterung häufig verwendeter Methoden für PHP-MySQL-Transaktionsvorgänge

Das obige ist der detaillierte Inhalt vonDefinition und Verwendung von Zustandsmustern in PHP. 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