久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

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

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

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

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

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

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

實(shí)例

<?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ā)起人恢復(fù)到備忘錄對(duì)象記錄的狀態(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 { // 負(fù)責(zé)人(Caretaker)角色 private $_memento; public function getMemento() { return $this->_memento; } public function setMemento(Memento $memento) { $this->_memento = $memento; }} // client/* 創(chuàng)建目標(biāo)對(duì)象 */$org = new Originator();$org->setState(’open’);$org->showState();/* 創(chuàng)建備忘 */$memento = $org->createMemento();/* 通過(guò)Caretaker保存此備忘 */$caretaker = new Caretaker();$caretaker->setMemento($memento);/* 改變目標(biāo)對(duì)象的狀態(tài) */$org->setState(’close’);$org->showState();/* 還原操作 */$org->restoreMemento($caretaker->getMemento());$org->showState();?>優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

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

缺點(diǎn)

如果發(fā)起人角色的狀態(tài)需要完整地存儲(chǔ)到備忘錄對(duì)象中,那么在資源消耗上面?zhèn)渫泴?duì)象會(huì)很昂貴。當(dāng)負(fù)責(zé)人角色將一個(gè)備忘錄存儲(chǔ)起來(lái)的時(shí)候,負(fù)責(zé)人可能并不知道這個(gè)狀態(tài)會(huì)占用多大的存儲(chǔ)空間,從而無(wú)法提醒用戶一個(gè)操作是否會(huì)很昂貴。當(dāng)發(fā)起人角色的狀態(tài)改變的時(shí)候,有可能這個(gè)狀態(tài)無(wú)效。
標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 精品日韩一区二区三区 | 国产ts余喵喵和直男多体位 | 色九九 | 天天久 | 国产精品久久久久久久久污网站 | 日韩精品视频在线观看免费 | 99久久免费观看 | 成人久久18 | 午夜免费小视频 | 在线观看视频一区二区三区 | 欧美激情国产日韩精品一区18 | 日韩在线精品 | av福利网站 | 久久久久久久久久国产精品 | 亚洲国产精品久久久 | 国产成人在线一区二区 | 99爱国产 | 国产精品美女久久久久aⅴ国产馆 | 夸克满天星在线观看 | 2021狠狠干 | 国产成人午夜 | 亚洲www啪成人一区二区 | 国产黄色免费网站 | 国产精品亚洲区 | 一区二区在线 | 亚洲精品在| 国产精品久久久久久久久久99 | 国产精品亚洲精品 | 日日干夜夜操 | 久久综合入口 | 婷婷久久综合 | 五月天婷婷精品 | 免费一区二区三区 | 久久中文在线观看 | 亚洲国产精品一区二区www | 久久涩涩| baoyu123成人免费看视频 | 国产精品178页 | 国产成人一区 | 午夜免费福利视频 | 成人免费视频网 |