免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
C#設(shè)計模式系列:備忘錄模式(Memento)

1、備忘錄模式簡介

1.1>、定義

  備忘錄模式在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài)。這樣以后就可以將該對象恢復(fù)到原先保存的狀態(tài)。

1.2>、使用頻率

  

  低

2、備忘錄模式結(jié)構(gòu)

2.1>、結(jié)構(gòu)圖

2.2>、參與者

  備忘錄模式參與者:

   Memento

    ° 為創(chuàng)建對象的各個部件指定抽象接口

    ° 防止Originator意外的其他對象訪問備忘錄。備忘錄實際上有兩個接口,Caretaker只能看到備忘錄的窄接口,它只能將備忘錄傳遞給其他對象。Originator能夠看到一個寬接口,允許它訪問返回到先前狀態(tài)所需的所有數(shù)據(jù)。理想的情況是只允許生成備忘錄的那個Originator訪問本備忘錄的內(nèi)部狀態(tài)。

   Originator

    ° 創(chuàng)建一個備忘錄,記錄當(dāng)前時刻的內(nèi)部狀態(tài)。

    ° 使用備忘錄恢復(fù)內(nèi)部狀態(tài)。

   Caretaker

    ° 負責(zé)保存?zhèn)渫?/p>

    ° 不能對備忘錄的內(nèi)容進行操作或檢查

  在備忘錄模式中,Caretaker負責(zé)把Originator創(chuàng)建的Memento進行備份,當(dāng)需要的時候,Originator可以再使用Caretaker中保存的Memento進行恢復(fù),Originator中的所有狀態(tài)被恢復(fù)到備份操作之前的狀態(tài)。

3、備忘錄模式結(jié)構(gòu)實現(xiàn)

  Memento.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace DesignPatterns.MementoDesignPattern.Structural{    public class Memento    {        private string _state;        public Memento(string state)        {            this._state = state;        }        public string State        {            get { return _state; }        }    }}

  Originator.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace DesignPatterns.MementoDesignPattern.Structural{    public class Originator    {        private string _state;        public string State        {            get            {                return _state;            }            set            {                _state = value;                Console.WriteLine("State = " + _state);            }        }        public Memento CreateMemento()        {            return (new Memento(_state));        }        public void SetMemento(Memento memento)        {            Console.WriteLine("Restoring state...");            State = memento.State;        }    }}

  Caretaker.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace DesignPatterns.MementoDesignPattern.Structural{    public class Caretaker    {        private Memento _memento;        public Memento Memento        {            get            {                return _memento;            }            set            {                _memento = value;            }        }    }}

  Program.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using DesignPatterns.MementoDesignPattern.Structural;namespace DesignPatterns.MementoDesignPattern{    class Program    {        static void Main(string[] args)        {            Originator o = new Originator();            o.State = "On";            Caretaker c = new Caretaker();            c.Memento = o.CreateMemento();            o.State = "Off";            o.SetMemento(c.Memento);        }    }}

  運行輸出:

State = OnState = OffRestoring state...State = On請按任意鍵繼續(xù). . .

4、備忘錄模式應(yīng)用分析

  備忘錄模式適用情形:

  1>、必須保存一個對象在某一個時刻的部分狀態(tài),這樣以后需要時才能恢復(fù)到先前的狀態(tài)。

  2>、如果用一個接口來讓其他對象直接得到被保存對象的內(nèi)部狀態(tài),將會暴露對象的實現(xiàn)細節(jié)并破壞對象的封裝性。

  備忘錄模式特點:

  1>、保持封裝邊界。使用備忘錄可以避免暴露一些只應(yīng)由Originator管理卻又必須存儲在Originator之外的信息。該模式把可能很復(fù)雜的Originator內(nèi)部信息對其他對象屏蔽起來,從而保持了封裝邊界。

  2>、簡化Originator。在其他的保持封裝性的設(shè)計中,Originator負責(zé)保持Client請求過的內(nèi)部狀態(tài)版本。把所存儲管理的重任交給了Originator,讓Client管理它們請求的狀態(tài)將會簡化Originator,并使得Client工作結(jié)束時無需通知Originator。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
設(shè)計模式之備忘錄(Memento Pattern)模式
設(shè)計模式23:Memento Pattern (備忘錄模式)
設(shè)計模式之備忘錄模式
簡說設(shè)計模式——備忘錄模式
【C#設(shè)計模式-備忘錄模式】
備忘錄模式(Memento pattern)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服