一、Norton Ghost的方便与问题php
咱们大多数win的用户都用过Norton Ghost,只要将目前系统备份一下生成镜像文件,等系统中毒或崩溃的时候,用Norton Ghost恢复一下就回到备份时候的样子了。html
这个能够说就是备忘(Memento)模式的基本原理了,先备份,须要的时候恢复。所以备忘模式是比较好理解的。服务器
但在实际应用中,如何正确的应用备忘模式,是须要注意的。并发
难道咱们在word写文章的时候,先要Ghost备份一下全部的硬盘,一旦文章写错了,须要恢复,就用Ghost覆盖硬盘?网站
就像有些网站的备份系统,作的是全站恢复,虽然方便,可是他的备份和恢复的范围和Norton Ghost是相似的。this
若是仅仅是调整了某个页面的分页列表的样式,那么会遇到如下问题:spa
一、99%的数据都没变化,也就是99%的备份和恢复都是多余的rest
二、全站备份和恢复,对于服务器的压力是很大的,甚至拖垮服务器htm
三、执行时间可能很长对象
四、全站数据操做,一旦中途操做失败,就不得不重头再来
二、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();
- ?>
这样就没必要全站备份和恢复了。
二、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()
- {
-
- $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