国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

常用設計模式之備忘錄模式及其PHP實現

瀏覽:3日期:2022-09-13 09:08:03

備忘錄模式是一種行為型模式,它在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態。這樣可以在以后把該對象的狀態恢復到之前保存的狀態。

主要角色備忘錄(Memento)角色:存儲發起人(Originator)對象的內部狀態,而發起人根據需要決定備忘錄存儲發起人的哪些內部狀態。備忘錄可以保護其內容不被發起人(Originator)對象之外的任何對象所讀取。發起人(Originator)角色:創建一個含有當前的內部狀態的備忘錄對象,使用備忘錄對象存儲其內部狀態負責人(Caretaker)角色:負責保存備忘錄對象,不檢查備忘錄對象的內容適用性必須保存一個對象在某一個時刻的(部分)狀態,這樣以后需要時它才能恢復到先前的狀態。如果一個用接口來讓其它對象直接得到這些狀態,將會暴露對象的實現細節并破壞對象的封裝性。類圖

常用設計模式之備忘錄模式及其PHP實現

實例

<?phpclass Originator { // 發起人(Originator)角色 private $_state; public function __construct() {$this->_state = ’’; } public function createMemento() { // 創建備忘錄return new Memento($this->_state); } public function restoreMemento(Memento $memento) { // 將發起人恢復到備忘錄對象記錄的狀態上$this->_state = $memento->getState(); } public function setState($state) { $this->_state = $state; } public function getState() { return $this->_state; } public function showState() {} }class Memento { // 備忘錄(Memento)角色 private $_state; public function __construct($state) {$this->setState($state); } public function getState() { return $this->_state; } public function setState($state) { $this->_state = $state;}}class Caretaker { // 負責人(Caretaker)角色 private $_memento; public function getMemento() { return $this->_memento; } public function setMemento(Memento $memento) { $this->_memento = $memento; }} // client/* 創建目標對象 */$org = new Originator();$org->setState(’open’);$org->showState();/* 創建備忘 */$memento = $org->createMemento();/* 通過Caretaker保存此備忘 */$caretaker = new Caretaker();$caretaker->setMemento($memento);/* 改變目標對象的狀態 */$org->setState(’close’);$org->showState();/* 還原操作 */$org->restoreMemento($caretaker->getMemento());$org->showState();?>優缺點

優點

有時一些發起人對象的內部信息必須保存在發起人對象以外的地方,但是必須要由發起人對象自己讀取。簡化了發起人(Originator)類。發起人(Originator)不再需要管理和保存其內部狀態的一個個版本,客戶端可以自行管理它們所需要的這些狀態的版本當發起人角色的狀態改變的時候,有可能這個狀態無效,這時候就可以使用暫時存儲起來的備忘錄將狀態復原。

缺點

如果發起人角色的狀態需要完整地存儲到備忘錄對象中,那么在資源消耗上面備忘錄對象會很昂貴。當負責人角色將一個備忘錄存儲起來的時候,負責人可能并不知道這個狀態會占用多大的存儲空間,從而無法提醒用戶一個操作是否會很昂貴。當發起人角色的狀態改變的時候,有可能這個狀態無效。
標簽: PHP
相關文章:
主站蜘蛛池模板: 91情国产l精品国产亚洲区 | 色www永久免费网站国产 | 日本毛片免费看 | 一级片网址| 久久久久久久久久毛片精品美女 | 精品日本久久久久久久久久 | 欧美亚洲综合视频 | 99热久久精品免费精品 | 国产亚洲一区二区三区不卡 | 久久久久久久国产视频 | 国产亚洲欧美成人久久片 | 成人精品国产亚洲欧洲 | 久久精品国产这里是免费 | 精品一久久香蕉国产二月 | 九九久久精品 | 成人久久视频 | 可以免费看黄色的网站 | 国产99精品一区二区三区免费 | 国产一区二区三区四区在线 | 国产成人精品一区二区 | 国产在线99 | 日韩三及片 | 亚洲偷自拍另类图片二区 | 亚洲成人高清在线 | 2021最新国产精品一区 | 精品欧美一区二区三区在线 | 男女很舒服爽视频免费 | 另类专区 亚洲 | 免费乱淫视频 | cao在线视频| 欧美一级二级三级 | xxxxfreexxxx人妖| 欧美午夜成年片在线观看 | 欧美一级毛片免费网站 | 久久在线| 国产精品国产三级国产专播 | 九九视频在线观看视频6偷拍 | 国产粉嫩高中生无套第一次 | 亚洲天堂网在线视频 | 国产一区二区三区免费视频 | 播播网手机在线播放 |