一、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