标签:设计模式 备忘录模式
<?php /** * 3.7 备忘录模式 * 定义: * 在不破坏封装性的前提下,捕获一个对象的内 * 部状态,并在该对象之外保存这个状态,这样 * 以后就可将该对象恢复到原先保存的状态。 * * 角色: * 1. 发起人(Originator)类 * 职责:负责创建一个备忘录Memento,用以 * 记录当前时刻它的内部状态,并可 * 使用备忘录恢复内部状态。Originator * 可根据需要决定Memento存储它的哪 * 些内部状态。 * 2. 备忘录(Memento)类 * 职责:负责存储Originator对象的内部状态 * ,并可防止Originator以外的其他对 * 象访问备忘录Memento。备忘录有两个 * 接口,Caretaker只能看到备忘录的窄 * 接口,它只能将备忘录传递给其他对 * 象。Originator能够看到一个宽接口 * ,允许它访问返回先前状态所需的所有 * 数据。 * 3. 管理者(Caretaker)类 * 职责:负责保存好备忘录Memento,不能对备忘 * 录的内容同进行操作或检查。 * * 优点: * 1. 使用备忘录模式,可以避免暴露一些只应由 * * * 缺点: * 1. 有时一些发起人对象的内部信息必须保存在 * 发起人对象以外的地方,但是必须有发起人 * 对象自己读取,这时使用备忘录模式可以把 * 复杂的发起人内部信息对其他的对象屏蔽起 * 来,从而可以恰当的保持封装的边界。 * 2. 本模式简化了发起人类。发起人不在需要管 * 理和保存内部状态的一个个版本,客户端可 * 以自己管理他们所需要的这些状态的版本。 * 3. 当发起人角色的状态改变的时候,有可能这 * 个状态无效,这时候,就可以使用暂时存储 * 起来的备忘录状态复原。 * * 使用场景: * 1. 比较适用于功能比较复杂的,但需要维护或 * 记录属性历史的类; * 2. 需要保存的属性只是众多属性中的一小部分 * 时。 * * */ //发起人类 class Originator{ //需要保存的属性,可以有多个 private $state; public function setState($state){ $this->state=$state; } public function getState(){ return $this->state; } //创建备忘录,将当前需要保存的信息导入并 //实例化出一个Memento对象 public function CreateMemento(){ return new Memento($this->state); } //恢复备忘录,将Memento导入并将相关数据恢复 public function setMemento(Memento $memento){ $this->state=$memento->getState(); } //显示数据 public function show(){ echo ‘状态:‘.$this->state; } } //备忘录类 class Memento{ private $state; public function __construct($state){ $this->state=$state; } public function getState(){ return $this->state; } } //管理者类 //用来管理备忘录 class Caretaker{ private $memento; public function setMemento(Memento $memento){ $this->memento=$memento; } public function getMemento(){ return $this->memento; } } // 客户端 // 创建需要备忘录保存状态的对象 $originator=new Originator(); //初始状态属性为On $originator->setState(‘On‘); $originator->show(); //生成备忘录的管理器以便保存状态 $caretaker=new Caretaker(); $caretaker->setMemento($originator->CreateMemento()); $originator->setState(‘Off‘); $originator->show(); //恢复初始状态 $originator->setMemento($caretaker->getMemento()); $originator->show(); ?>
本文出自 “一切皆有可能” 博客,请务必保留此出处http://noican.blog.51cto.com/4081966/1614790
标签:设计模式 备忘录模式
原文地址:http://noican.blog.51cto.com/4081966/1614790