1.目的是在不破坏封装的情况下捕获对象的内部状态,并将该状态保存在对象外部。这样,将来对象的状态可以恢复到以前保存的状态。
二.纪念品图案结构图。
3.纪念品模式1中的主要角色。memorant角色:存储发起方对象的内部状态,发起方根据需要决定备忘录中存储发起方的哪些内部状态。可以保护备忘录不被除发起者对象之外的任何对象读取。2.发起人角色:创建包含当前内部状态的备忘录对象,并使用该备忘录对象存储其内部状态。3.管理员角色:负责保存备忘录对象,而不检查备忘录对象的内容。4.纪念品图案的优缺点。纪念品图案的优点:1。有时,某些启动器对象的内部信息必须保存在启动器对象之外,但必须由启动器对象本身读取。2.发起人类别被简化。发起者不再需要管理和保存其内部状态的版本,但是客户端可以自己管理这些状态的版本。3.当发起者角色的状态发生变化时,有可能该状态无效,因此可以使用临时存储的备忘录来恢复该状态。纪念品模式的缺点:1。如果发起者角色的状态需要完全存储在memo对象中,那么memo对象在资源消耗方面将非常昂贵。2.当负责人的角色存储备忘录时,负责人可能不知道这种状态会占用多少存储空间,所以不可能提醒用户一次操作是否会很贵。3.当启动器角色的状态更改时,该状态可能无效。五、纪念品模式适用场景1。必须保存对象在某一时刻的(部分)状态,以便以后需要时可以恢复到以前的状态。2.如果使用接口让其他对象直接获取这些状态,就会暴露对象的实现细节,破坏对象的封装。6.纪念品模式和其他模式1。命令模式:命令模式也可以用来恢复对象的状态。一般来说,命令模式可以支持多级状态的回滚,而Memento只是一个简单的恢复(快照)。在命令模式下的每次撤销中,您都可以使用Memento来保存对象的状态。2.迭代器模式:Memo可以用于迭代7。memotion模式PHP示例。
?php/** *发起人(发起人)角色*/class鼻祖{ private $ _ state public function _ _ construct(){ $ this-_ state=' ';} /** * 创建备忘录* @归还纪念品包含当前状态的备忘录对象*/public函数create memotion(){ 0返回新的memotion($ this-_ state);} /** * 将发起人恢复到备忘录对象记录的状态上* @ param Memento $ Memento */public function restore Memento(Memento $ Memento){ $ this-_ state=$ Memento-getState();}公共函数SetState($ state){ $ this-_ state=$ state;}公共函数GetState(){ return $ this-_ state;} /** * 测试用方法,显示状态*/public函数show state(){ echo ' Original state 3360 ',$this-getState(),' br/';} } /** * 备忘录(纪念品)角色*/class memoto { private $ _ state;public function _ _ construct($ state){ $ this-setState($ state);}公共函数GetState(){ return $ this-_ state;}公共函数SetState($ state){ $ this-_ state=$ state;} } /** * 负责人(管理员)角色*/class看守人{私人$ _纪念品公共函数getmemoto(){ return $ this-_ memoto;}公共函数setmemoto(memoto $ memoto){ $ this-_ memoto=$ memoto;} } /** * 客户端*/class Client { /** *主程序。*/公共静态函数main() { /*创建目标对象*/$组织=新发起者();$ org-SetState(' open ');$ org-ShowState();/* 创建备忘*/$ memoto=$ org-create memoto();/* 通过看门人保存此备忘*/$看守人=新看守人();$看管人-setmemoto($ memoto);/* 改变目标对象的状态*/$ org-SetState(' close ');$ org-ShowState();/* 还原操作*/$ org-restore mento($看守人-getmemoto());$ org-ShowState();} }客户端:3360 main();以上就是使用服务器端编程语言(专业超文本预处理器的缩写)实现备忘录模式的代码,还有一些关于备忘录模式的概念区分,希望对大家的学习有所帮助。