备忘录模式——论微信撤回
来源:互联网 发布:qq群抽奖软件 编辑:程序博客网 时间:2024/04/30 06:24
玩过大型单机游戏的都知道,通常我们在打大boss的时候会先保存,万一失败了就可以重新读取进度返回打boss前的状态,这种模式和数据库中的事务回滚也挺类似的,当sql语句执行失败时也会回滚到执行语句前的状态。既然能回滚到之前的状态,证明我们肯定是有对之前的状态进行存储,其实这就相当于写了备忘录,忘了的时候只需要看一下备忘录,又可以提取出信息。基于这个,我们今天来用备忘录模式来模仿一下微信撤回。
首先我们需要定义一个发起者,也就是需要恢复状态功能的对象。
在这个例子中我们先来定义一个聊天窗口类:
class window{ //窗口中的聊天消息 public $chatRecord=array(); //备忘录对象 private $memoire; //管理者对象 private $manager; public function __construct() { $this->manager=new Manager(); $this->memoire=$this->manager->createMemoire($this->chatRecord); } //每次发送或接收消息前将之前的记录进行保存 public function addMessage($message){ $this->memoire->setRecords($this->chatRecord); $this->chatRecord[]=$message; } public function showMessage(){ echo "最新窗口显示:<br>"; foreach($this->chatRecord as $id=>$message){ $id=$id+1; echo "第{$id}条信息:{$message}<br>"; } } public function recall(){ echo "已经撤回了一条消息<br>"; //将当前记录改为之前保存的记录 $this->chatRecord=$this->manager->getMemoireData(); }}
备忘录类,保存消息
class memoire{ public $records; public function __construct($record) { $this->records=$record; } public function setRecords($record){ $this->records=$record; }}
管理者类,提供对备忘录生成和访问方法,限制对备忘录进行修改
class Manager{ private $memoire; public function createMemoire($record){ $this->memoire=new memoire($record); return $this->memoire; } //返回备忘录数据 public function getMemoireData(){ return $this->memoire->records; }}
好了,来看看效果吧~~
//打开一个和美眉的聊天窗口$win=new window();//约美眉出来吃饭$win->addMessage('晚上一起出去要不要');//美眉拒绝$win->addMessage('不要');$win->showMessage();//美眉仔细想了一下,觉得不好意思拒绝,于是撤回$win->recall();$win->showMessage();//美眉接收请求$win->addMessage('要');$win->showMessage();
打印出来的信息如下:
0 0
- 备忘录模式——论微信撤回
- 设计模式—备忘录模式
- 备忘录模式——Memento
- 每日设计模式——备忘录模式
- 设计模式——备忘录模式(Memento)
- 设计模式——备忘录模式
- java设计模式——备忘录模式
- JAVA设计模式——备忘录模式
- 设计模式(18)——备忘录模式
- 设计模式——备忘录模式
- PHP设计模式——备忘录模式
- 设计模式——备忘录模式
- 设计模式GOF23——备忘录模式
- C++设计模式——备忘录模式
- 设计模式——备忘录模式
- 设计模式——备忘录模式
- 【设计模式】—— 备忘录模式Memento
- 设计模式——备忘录模式
- URLConnection参数详解
- Android ORM 框架之 greenDAO应用基础
- Android 安装release版apk出现多个实例的问题解决方法
- Linux系统中如何添加自己的库文件路径
- 编译 openwrt 遇到问题 一 libiconv.so.2: cannot open shared object file
- 备忘录模式——论微信撤回
- findbug的错误类型及修改建议
- 理解Spring 容器设计理念
- Java 单例模式 安全问题
- Spring4.X + Spring MVC + Mybatis3 零配置应用开发框架搭建详解(5) - Redis缓存配置
- 如何设置从U盘启动安装win7系统
- 身份证加密BlowFish
- 常用 Git 命令清单
- 真正从零开始,TensorFlow详细安装入门图文教程!