欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

淺談PHP設(shè)計模式的備忘錄模式

簡介:

備忘錄模式,屬于行為型的設(shè)計模式。
在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài)。這樣以后就可以將該對象恢復到原先保存的狀態(tài)。
備忘錄模式顧名思義,就是存檔功能,類似Git工具,每次提交都相當于一次備份。
主要有一下角色構(gòu)成
Memento —— 負責存儲 Originator 的 唯一內(nèi)部狀態(tài) ,它可以包含: string,number, array,類的實例等等。Memento 「不是公開的類」(任何人都不應該且不能更改它),并防止 Originator 以外的對象訪問它,它提供 2 個接口:Caretaker 只能看到備忘錄的窄接口,他只能將備忘錄傳遞給其他對象。Originator 卻可看到備忘錄的寬接口,允許它訪問返回到先前狀態(tài)所需要的所有數(shù)據(jù)。
Originator —— 它負責創(chuàng)建 Memento ,并記錄 外部對象當前時刻的狀態(tài), 并可使用 Memento 恢復內(nèi)部狀態(tài)。Originator 可根據(jù)需要決定 Memento 存儲 Originator 的哪些內(nèi)部狀態(tài)。 Originator 也許(不是應該)有自己的方法(methods)。 但是,他們 不能更改已保存對象的當前狀態(tài)。
Caretaker —— 負責保存 Memento。 它可以修改一個對象;決定 Originator 中對象當前時刻的狀態(tài); 從 Originator 獲取對象的當前狀態(tài); 或者回滾 Originator 中對象的狀態(tài)。

創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的順義網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

適用場景:

任何撤銷操作的后悔藥,前提是有備份。

優(yōu)點:

任何撤銷操作的后悔藥,前提是有備份。

缺點:

存檔的過程會帶來性能問題。

代碼:

//原發(fā)器,也可以叫做發(fā)起人。它有一個內(nèi)部狀態(tài)(state),這個狀態(tài)可以在不同的情況下進行改變。當某一個事件發(fā)生時,需要將這個狀態(tài)恢復到原先的狀態(tài)。在這里,我們有一個CreateMemento()用于創(chuàng)建一個備忘錄(存檔),有一個SetMeneto()用于還原狀態(tài)(讀檔)。
class Originator
{
    private $state;
    public function SetMeneto(Memento $m)
    {
        $this->state = $m->GetState();
    }
    public function CreateMemento()
    {
        $m = new Memento();
        $m->SetState($this->state);
        return $m;
    }

    public function SetState($state)
    {
        $this->state = $state;
    }

    public function ShowState()
    {
        echo $this->state, PHP_EOL;
    }
}

//備忘錄,非常簡單,就是用于記錄狀態(tài)。將這個狀態(tài)以對象的形式保存,就可以讓原發(fā)器非常方便地創(chuàng)建很多存檔用于記錄各種不同的狀態(tài)。
class Memento
{
    private $state;
    public function SetState($state)
    {
        $this->state = $state;
    }
    public function GetState()
    {
        return $this->state;
    }
}

//負責人,也叫做管理者類,保存?zhèn)渫?,當需要的時候從這里取出備忘錄。它只負責保存,不能修改備忘錄。在復雜的應用中,可以將這里做成列表,就像游戲中可以選擇性的展現(xiàn)多條存檔記錄供玩家選擇。
class Caretaker
{
    private $memento;
    public function SetMemento($memento)
    {
        $this->memento = $memento;
    }
    public function GetMemento()
    {
        return $this->memento;
    }
}


//調(diào)用端==================================================
//客戶端的調(diào)用中,我們的原發(fā)器初始化狀態(tài)后進行了保存,然后人為的更改了狀態(tài)。這時只需要通過負責人將狀態(tài)還原回來就可以了。
$o = new Originator();
$o->SetState('狀態(tài)1');
$o->ShowState();

// 保存狀態(tài)
$c = new Caretaker();
$c->SetMemento($o->CreateMemento());

$o->SetState('狀態(tài)2');
$o->ShowState();

// 還原狀態(tài)
$o->SetMeneto($c->GetMemento());
$o->ShowState();

分享標題:淺談PHP設(shè)計模式的備忘錄模式
URL地址:http://chinadenli.net/article30/dsoippo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名軟件開發(fā)、域名注冊、網(wǎng)站收錄、App開發(fā)、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計