国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

常用設(shè)計模式之備忘錄模式及其PHP實現(xiàn)

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

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

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

常用設(shè)計模式之備忘錄模式及其PHP實現(xiàn)

實例

<?phpclass Originator { // 發(fā)起人(Originator)角色 private $_state; public function __construct() {$this->_state = ’’; } public function createMemento() { // 創(chuàng)建備忘錄return new Memento($this->_state); } public function restoreMemento(Memento $memento) { // 將發(fā)起人恢復到備忘錄對象記錄的狀態(tài)上$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/* 創(chuàng)建目標對象 */$org = new Originator();$org->setState(’open’);$org->showState();/* 創(chuàng)建備忘 */$memento = $org->createMemento();/* 通過Caretaker保存此備忘 */$caretaker = new Caretaker();$caretaker->setMemento($memento);/* 改變目標對象的狀態(tài) */$org->setState(’close’);$org->showState();/* 還原操作 */$org->restoreMemento($caretaker->getMemento());$org->showState();?>優(yōu)缺點

優(yōu)點

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

缺點

如果發(fā)起人角色的狀態(tài)需要完整地存儲到備忘錄對象中,那么在資源消耗上面?zhèn)渫泴ο髸馨嘿F。當負責人角色將一個備忘錄存儲起來的時候,負責人可能并不知道這個狀態(tài)會占用多大的存儲空間,從而無法提醒用戶一個操作是否會很昂貴。當發(fā)起人角色的狀態(tài)改變的時候,有可能這個狀態(tài)無效。
標簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 罗江县| 新建县| 卓资县| 昌都县| 元朗区| 泸州市| 当阳市| 本溪| 哈尔滨市| 观塘区| 伽师县| 高雄市| 辽宁省| 鄂托克旗| 宜宾县| 南召县| 措勤县| 新疆| 吉水县| 武穴市| 嘉禾县| 云南省| 治县。| 哈密市| 阿克陶县| 霍邱县| 宜兰市| 武安市| 西平县| 桃园县| 汽车| 仙居县| 沾益县| 张家界市| 盐津县| 高要市| 尉犁县| 原平市| 香河县| 崇明县| 涞水县|