首页 / 设计模式 / PHP设计模式之备忘模式
PHP设计模式之备忘模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP设计模式之备忘模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2347字,纯文字阅读大概需要4分钟。
内容图文
![PHP设计模式之备忘模式](/upload/InfoBanner/zyjiaocheng/1083/ee7f01055100457b8f92029e39afeaa3.jpg)
1、Norton Ghost的方便与问题
我们大多数win的用户都用过Norton Ghost,只要将目前系统备份一下生成镜像文件,等系统中毒或崩溃的时候,用Norton Ghost恢复一下就回到备份时候的样子了。
这个可以说就是备忘(Memento)模式的基本原理了,先备份,需要的时候恢复。因此备忘模式是比较好理解的。
但在实际应用中,如何正确的应用备忘模式,是需要注意的。
难道我们在word写文章的时候,先要Ghost备份一下所有的硬盘,一旦文章写错了,需要恢复,就用Ghost覆盖硬盘?
就像有些网站的备份系统,做的是全站恢复,虽然方便,但是他的备份和恢复的范围和Norton Ghost是类似的。
如果仅仅是调整了某个页面的分页列表的样式,那么会遇到以下问题:
1、99%的数据都没变化,也就是99%的备份和恢复都是多余的
2、全站备份和恢复,对于服务器的压力是很大的,甚至拖垮服务器
3、执行时间可能很长
4、全站数据操作,一旦中途操作失败,就不得不重头再来
2、php开发的“undo”功能
我们平时用的很多软件都提供了一个叫“undo”或“撤销”的功能,可以对前面一个操作进行撤销,那么我们开发php也可以借鉴。
这样我们可以更好的应用和理解Memento模式,因为备份和恢复是可以做到各种粒度上的。
例:
-
<?php
-
//备忘类
-
class Memento
-
{
-
public function backup()
-
{
-
//保存现有的分页样式
-
echo ‘样式已经保存<br>‘ ;
-
}
-
-
public function restore()
-
{
-
//用保存的样式去覆盖
-
echo ‘样式已经恢复<br>‘ ;
-
}
-
}
-
-
//设置分页样式
-
class ListStyle
-
{
-
//备忘对象
-
private $memento ;
-
-
//构造方法
-
public function __construct()
-
{
-
$this ->memento = new Memento();
-
}
-
-
//设置样式
-
public function setStyle()
-
{
-
//开始先备份样式
-
$this ->memento->backup();
-
-
//设置样式
-
echo ‘设置了样式<br>‘ ;
-
}
-
-
//撤销方法
-
public function undo()
-
{
-
$this ->memento->restore();
-
}
-
}
-
-
$listStyle = new ListStyle();
-
//设置样式,同时备份
-
$listStyle ->setStyle();
-
//撤销设置
-
$listStyle ->undo();
-
?>
这样就不必全站备份和恢复了。
2、php开发的“redo”功能
前面我们实现了“undo”功能,那个其他软件里与此对应的还有一个就是“redo”功能,通常叫“重做”。
因此我们需要改进一下代码。
例:
-
<?php
-
//备忘类
-
class Memento
-
{
-
public function backup()
-
{
-
//保存现有的分页样式
-
echo ‘样式已经保存<br>‘ ;
-
}
-
-
public function restore()
-
{
-
//用保存的样式去覆盖
-
echo ‘样式已经恢复<br>‘ ;
-
}
-
}
-
-
//设置分页样式
-
class ListStyle
-
{
-
//备忘对象
-
private $memento ;
-
-
//构造方法
-
public function __construct()
-
{
-
$this ->memento = new Memento();
-
}
-
-
//设置样式
-
public function setStyle()
-
{
-
//开始先备份样式
-
$this ->memento->backup();
-
-
//设置样式
-
echo ‘设置了样式<br>‘ ;
-
}
-
-
//撤销方法
-
public function undo()
-
{
-
//先保存,为了redo
-
$this ->memento->backup();
-
$this ->memento->restore();
-
}
-
-
//重做方法
-
public function redo()
-
{
-
$this ->memento->restore();
-
}
-
}
-
-
$listStyle = new ListStyle();
-
//设置样式,同时备份
-
$listStyle ->setStyle();
-
//撤销设置
-
$listStyle ->undo();
-
//重做设置
-
$listStyle ->redo();
-
?>
这样一来,我们可以提供了精细的备忘模式的实现。 更多PHP教程,请访问代码家园;
思考:
备忘模式是一种常用的模式,特别是软件开发中,对于php,也可以应用在一些场合。
但是php的备忘模式,常常需要注意可行性,因为软件,比如word之类的,都是单机为主,而php的网站往往被许多用户同时访问。
大量的访问,如果此时备份,服务器是否能承受?如何解决并发访问的数据一致性?
尽管本文讨论了精细的、独立的备忘模式的应用,但是在实际应用中,还需要根据具体情况应用不同的策略
本文原地址: http://www.daimajiayuan.com/sitejs-16852-1.html
原文:http://3285518.blog.51cto.com/3275518/1408519
内容总结
以上是互联网集市为您收集整理的PHP设计模式之备忘模式全部内容,希望文章能够帮你解决PHP设计模式之备忘模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。