标签:设计模式 备忘录模式
<?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