Heim  >  Artikel  >  Backend-Entwicklung  >  Memo-Muster und seine PHP-Implementierung

Memo-Muster und seine PHP-Implementierung

伊谢尔伦
伊谢尔伦Original
2016-12-01 11:52:021283Durchsuche

Das Memomuster ist ein Verhaltensmuster, das den internen Zustand eines Objekts erfasst und diesen Zustand außerhalb des Objekts speichert, ohne die Kapselung zu zerstören. Dadurch können Sie den Zustand des Objekts später wieder auf seinen zuvor gespeicherten Zustand zurücksetzen.

Hauptrolle

Memento-Rolle: Speichert den internen Status des Urheberobjekts, und der Urheber entscheidet nach Bedarf, welcher interne Status des Urhebers im Memento gespeichert wird. Ein Andenken kann seinen Inhalt davor schützen, von einem anderen Objekt als dem Urheberobjekt gelesen zu werden.

Urheberrolle: Erstellen Sie ein Memoobjekt, das den aktuellen internen Status enthält, und verwenden Sie das Memoobjekt, um seinen internen Status zu speichern.

Verwalterrolle: Verantwortlich für das Speichern des Memoobjekts, nicht für die Überprüfung des Inhalts das Memo-Objekt

Anwendbarkeit

Es ist notwendig, (einen Teil) des Zustands eines Objekts zu einem bestimmten Zeitpunkt zu speichern, damit es bei Bedarf später wieder in den vorherigen Zustand zurückversetzt werden kann.

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 zerstört.

Klassendiagramm

Memo-Muster und seine PHP-Implementierung

Instanz

<?php
class Originator { // 发起人(Originator)角色
    private $_state;
    public function __construct() {
        $this->_state = &#39;&#39;;
    }
    public function createMemento() { // 创建备忘录
        return new Memento($this->_state);
    }
    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() {}
 
}
class Memento { // 备忘录(Memento)角色 
    private $_state;
    public function __construct($state) {
        $this->setState($state);
    }
    public function getState() { return $this->_state; } 
    public function setState($state) { $this->_state = $state;}
}
class Caretaker { // 负责人(Caretaker)角色 
    private $_memento;
    public function getMemento() { return $this->_memento; } 
    public function setMemento(Memento $memento) { $this->_memento = $memento; }
}
 
// client
/* 创建目标对象 */
$org = new Originator();
$org->setState(&#39;open&#39;);
$org->showState();
/* 创建备忘 */
$memento = $org->createMemento();
/* 通过Caretaker保存此备忘 */
$caretaker = new Caretaker();
$caretaker->setMemento($memento);
/* 改变目标对象的状态 */
$org->setState(&#39;close&#39;);
$org->showState();
/* 还原操作 */
$org->restoreMemento($caretaker->getMemento());
$org->showState();
?>

Vor- und Nachteile

Vorteile

Manchmal einige Die internen Informationen des Initiatorobjekts müssen außerhalb des Initiatorobjekts gespeichert werden, müssen jedoch vom Initiatorobjekt selbst gelesen werden.

Die Originator-Klasse wurde vereinfacht. Der Urheber muss keine Versionen seiner internen Status mehr verwalten und speichern. Clients können die Versionen dieser Status, die sie benötigen, selbst verwalten.

Wenn sich der Status der Urheberrolle ändert, ist es möglich, dass dieser Status ungültig ist. Zu diesem Zeitpunkt können Sie das vorübergehend gespeicherte Memo verwenden, um den Status wiederherzustellen.

Nachteile

Wenn der Status der Initiatorrolle vollständig im Memoobjekt gespeichert werden muss, ist das Memoobjekt hinsichtlich des Ressourcenverbrauchs sehr teuer.

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.

Wenn sich der Status der Initiatorrolle ändert, ist es möglich, dass der Status ungültig ist.


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
Vorheriger Artikel:Allgemeine PHP5-FunktionenNächster Artikel:Allgemeine PHP5-Funktionen