In diesem Artikel wird hauptsächlich der Memo-Modus im PHP-Designmodus vorgestellt und PHP zur Implementierung des Memo-Modus verwendet. Interessierte Freunde können darauf verweisen. Ich hoffe, es hilft allen.
1. Absicht
Erfassen Sie den internen Zustand eines Objekts und speichern Sie diesen Zustand außerhalb des Objekts, ohne die Kapselung zu zerstören. Dadurch können Sie den Zustand des Objekts später wieder auf seinen zuvor gespeicherten Zustand zurücksetzen.
2. Strukturdiagramm des Memo-Modus
3 Hauptrollen
1. Memento-Rolle:
speichert den internen Status des Urheberobjekts und der Urheber ändert sich je nach Bedarf. Bestimmt, welche internen Status des Initiators, den das Memo speichert.
Das Memo kann seinen Inhalt davor schützen, von einem anderen Objekt als dem Urheberobjekt gelesen zu werden.
2. Rolle des Urhebers:
Erstellen Sie ein Memoobjekt, das den aktuellen internen Status enthält.
Verwenden Sie das Memoobjekt, um seinen internen Status zu speichern.
3. Hausmeisterrolle:
Verantwortlich für das Speichern des Memoobjekts und nicht für die Überprüfung des Inhalts des Memoobjekts
4. Vorteile des Memomodus und Nachteile
Vorteile des Memo-Modus:
1. Manchmal müssen einige interne Informationen des Initiatorobjekts außerhalb des Initiatorobjekts gespeichert werden, sie müssen jedoch von den menschlichen Initiatorobjekten gespeichert werden selbst lesen.
2. Vereinfachte die Originator-Klasse. Der Urheber muss keine Versionen seiner internen Zustände mehr verwalten und speichern. Clients können die Versionen dieser Zustände, die sie benötigen, selbst verwalten.
3. Wenn sich der Status der Urheberrolle ändert, ist es möglich, dass dieser Status lautet Wenn der Status ungültig ist, können Sie das zwischengespeicherte Memo verwenden, um den Status wiederherzustellen.
Nachteile des Memo-Modus:
1. Wenn der Status der Initiatorrolle vollständig im Memo-Objekt gespeichert werden muss, ist das Memo-Objekt hinsichtlich des Ressourcenverbrauchs sehr teuer.
2. Wenn die verantwortliche Person ein Memo speichert, weiß die verantwortliche Person möglicherweise nicht, wie viel Speicherplatz dieser Status belegt, und kann den Benutzer daher nicht daran erinnern, ob ein Vorgang teuer sein wird.
3. Wenn sich der Status der Initiatorrolle ändert, ist der Status möglicherweise ungültig.
5. Anwendbare Szenarien des Memomodus
1. Der (Teil-)Zustand eines Objekts zu einem bestimmten Zeitpunkt muss gespeichert werden, damit es wiederhergestellt werden kann vorherigen Zustand, wenn er in der Zukunft benötigt wird.
2. Wenn eine Schnittstelle verwendet wird, um anderen Objekten den direkten Erhalt dieser Zustände zu ermöglichen, werden die Implementierungsdetails des Objekts offengelegt und die Kapselung des Objekts wird zerstört.
6. Memo-Modus und andere Modi
1. Befehlsmodus (Befehlsmodus): Der Befehlsmodus kann auch verwendet werden, um den Zustand eines Objekts wiederherzustellen. Der Befehlsmodus kann ein mehrstufiges Status-Rollback unterstützen. Memento ist nur eine einfache Wiederherstellung (Snapshot). Bei jedem Rückgängigmachen des Befehlsmodus kann Memento verwendet werden, um den Status des Objekts zu speichern.
2. Iterator-Modus (Iterator-Modus): Memo kann zum Iterieren verwendet werden
7. Memo-Modus PHP-Beispiel
<?php /** * 发起人(Originator)角色 */ class Originator { private $_state; public function __construct() { $this->_state = ''; } /** * 创建备忘录 * @return Memento 包含当前状态的备忘录对象 */ public function createMemento() { return new Memento($this->_state); } /** * 将发起人恢复到备忘录对象记录的状态上 * @param Memento $memento */ public function restoreMemento(Memento $memento) { $this->_state = $memento->getState(); } public function setState($state) { $this->_state = $state; } public function getState() { return $this->_state; } /** * 测试用方法,显示状态 */ public function showState() { echo "Original Status:", $this->getState(), "<br />"; } } /** * 备忘录(Memento)角色 */ class Memento { private $_state; public function __construct($state) { $this->setState($state); } public function getState() { return $this->_state; } public function setState($state) { $this->_state = $state; } } /** * 负责人(Caretaker)角色 */ class Caretaker { private $_memento; public function getMemento() { return $this->_memento; } public function setMemento(Memento $memento) { $this->_memento = $memento; } } /** * 客户端 */ class Client { /** * Main program. */ public static function main() { /* 创建目标对象 */ $org = new Originator(); $org->setState('open'); $org->showState(); /* 创建备忘 */ $memento = $org->createMemento(); /* 通过Caretaker保存此备忘 */ $caretaker = new Caretaker(); $caretaker->setMemento($memento); /* 改变目标对象的状态 */ $org->setState('close'); $org->showState(); /* 还原操作 */ $org->restoreMemento($caretaker->getMemento()); $org->showState(); } } Client::main(); ?>
Verwandte Empfehlungen:
Detaillierte Erläuterung des Bridge-Modus des PHP-Entwurfsmusters
PHP Entwurfsmuster Detaillierte Erläuterung des Proxy-Musters
Detaillierte Erläuterung des Strategiemusters des PHP-Entwurfsmusters
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung des PHP-Designmuster-Memomusters. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!