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
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
VerwendungsszenarioBetrachten 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
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 VerhaltenDer 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 DeduplizierungsmethodenDetaillierte 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!