亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

設計模式(22)---備忘錄模式

2019-11-14 16:14:52
字體:
來源:轉載
供稿:網友

基本定義

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

解釋:簡單來說,就是保存一個對象在某一時刻的特定狀態,在以后需要的時候可以將對象恢復到保存時的狀態。

 

基本代碼:

class Originator    {        PRivate string state;        public string State        {            get { return state; }            set { state = value; }        }        public Memento CreateMemento()        {            return new Memento(state);        }        public void SetMemento(Memento memento)        {            state = memento.State;        }        public void Display()        {            Console.WriteLine("State=" + state);        }    }    class Memento    {        private string state;        public string State        {            get { return state; }        }        public Memento(string state)        {            this.state = state;        }    }    class Caretaker    {        private Memento memento1;        public Memento Memento1        {            get { return memento1; }            set { memento1 = value; }        }    }
class Originator    {        private string state;        public string State        {            get { return state; }            set { state = value; }        }        public Memento CreateMemento()        {            return new Memento(state);        }        public void SetMemento(Memento memento)        {            state = memento.State;        }        public void Display()        {            Console.WriteLine("State=" + state);        }    }    class Memento    {        private string state;        public string State        {            get { return state; }        }        public Memento(string state)        {            this.state = state;        }    }    class Caretaker    {        private Memento memento1;        public Memento Memento1        {            get { return memento1; }            set { memento1 = value; }        }    }

客戶端調用:

Originator originator = new Originator();            originator.State = "on";            originator.Display();            Caretaker caretaker = new Caretaker();            caretaker.Memento1 = originator.CreateMemento();            originator.State = "off";            originator.Display();            originator.SetMemento(caretaker.Memento1);            originator.Display();
View Code

 

列舉具體實例:

游戲,保存一角色在打boss前的狀態,待打boss結束后再恢復到它之前的狀態。

class Program    {        static void Main(string[] args)        {            Role role = new Role(100, 100);            Console.WriteLine("大戰前:");            role.Display();            Caretaker caretaker = new Caretaker();            caretaker.memento = role.SaveMemento();            role.SetBloodFlow(20);            role.SetMagicPoint(20);            Console.WriteLine("大戰");            role.Display();            role.RestoreMemento(caretaker.GetMemento());            Console.WriteLine("恢復");            role.Display();            Console.Read();        }    }    class Role    {        private int bloodFlow;        private int magicPoint;        public Role(int bloodFlow, int magicPoint)        {            this.bloodFlow = bloodFlow;            this.magicPoint = magicPoint;        }        public int GetBloodFlow()        {            return bloodFlow;        }        public void SetBloodFlow(int bloodFlow)        {            this.bloodFlow = bloodFlow;        }        public int GetMagicPoint()        {            return magicPoint;        }        public void SetMagicPoint(int magicPoint)        {            this.magicPoint = magicPoint;        }        public void Display()        {            Console.WriteLine("用戶當前的狀態:");            Console.WriteLine("血量:" + GetBloodFlow() + ";藍量:" + GetMagicPoint());        }        public Memento SaveMemento()        {            return new Memento(GetBloodFlow (),GetMagicPoint ());        }        public void RestoreMemento(Memento memento)        {            this.bloodFlow = memento.GetBloodFlow();            this.magicPoint = memento.GetMagicPoint();        }    }    class Memento    {        private int bloodFlow;        private int magicPoint;        public Memento(int bloodFlow, int magicPoint)        {            this.bloodFlow = bloodFlow;            this.magicPoint = magicPoint;        }        public int GetBloodFlow()        {            return bloodFlow;        }        public void SetBloodFlow(int bloodFlow)        {            this.bloodFlow = bloodFlow;        }        public int GetMagicPoint()        {            return magicPoint;        }        public void SetMagicPoint(int magicPoint)        {            this.magicPoint = magicPoint;        }    }    class Caretaker    {        public Memento memento;        public Memento GetMemento()        {            return memento;        }        public void SetMemento(Memento memento)        {            this.memento = memento;        }    }
View Code

 

備忘錄模式的優缺點及適用場景:

優點:

為用戶提供一種可以恢復狀態的機制,用戶比較方便的恢復到某個歷史狀態。

隱藏恢復細節,用戶不需要關心狀態的保存細節。

缺點:

對象狀態需要完整存儲到備忘錄對象中,如果狀態數據很大,那么在資源消耗上,備忘錄對象會非常耗內存。

適用場景:

簡單來說,顯現其優點回避其缺點的地方都可以使用備忘錄模式。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区成人av| 91精品国产高清自在线| 久久久久日韩精品久久久男男| www.亚洲一二| 精品夜色国产国偷在线| 日本精品免费一区二区三区| 欧洲亚洲免费视频| 狠狠干狠狠久久| 久久免费视频网站| 久久久国产精品一区| 亚洲精品欧美一区二区三区| 操人视频在线观看欧美| 一本色道久久综合狠狠躁篇怎么玩| 成人福利视频在线观看| 久久成人国产精品| 亚洲福利小视频| 久久精品视频免费播放| 黑人巨大精品欧美一区二区| 欧美在线观看视频| 国产网站欧美日韩免费精品在线观看| 午夜精品一区二区三区在线视| 中文字幕欧美精品日韩中文字幕| 欧美激情喷水视频| 久久久久久久一区二区| 97国产suv精品一区二区62| 成人444kkkk在线观看| 亚洲在线视频福利| 国产精品美腿一区在线看| 91久久精品一区| 成人免费在线视频网址| 国产欧美一区二区三区视频| 成人久久久久久| 日韩欧美aⅴ综合网站发布| 精品五月天久久| 亚洲综合第一页| 8x海外华人永久免费日韩内陆视频| 欧美精品在线看| 欧美精品www在线观看| 在线视频一区二区| 91探花福利精品国产自产在线| 亚洲欧美在线磁力| 亚洲精品国产精品国自产观看浪潮| 午夜精品久久久久久99热软件| 国产精品一区二区三区成人| 日韩在线观看高清| 国产精品jvid在线观看蜜臀| 久久精品久久精品亚洲人| 亚洲国产欧美一区二区三区久久| 国模精品一区二区三区色天香| 欧美精品电影在线| 欧美一级大片在线观看| 成人精品在线观看| 国产在线视频一区| 国产一区视频在线播放| 日韩免费在线视频| 91欧美视频网站| 国产精品成人一区二区| 精品国偷自产在线视频99| 亚洲欧美日韩中文在线制服| 亚洲一级黄色av| 狠狠躁18三区二区一区| 欧美极品少妇与黑人| 久久久久久久久国产| 欧美一级片久久久久久久| 菠萝蜜影院一区二区免费| 美女av一区二区三区| 91精品国产91久久久久久| 91久久精品国产91性色| 欧美日韩国产精品一区二区不卡中文| 欧美精品久久一区二区| 日韩亚洲欧美成人| 国产91精品久久久久久| 欧美夫妻性生活视频| 欧美日韩第一页| 国内精品久久久久影院优| 中文字幕日韩高清| 77777少妇光屁股久久一区| 国产精品一区久久久| 色综合久久天天综线观看| 91久久在线播放| 992tv在线成人免费观看| 国产欧美一区二区三区四区| 97涩涩爰在线观看亚洲| 日韩精品极品在线观看播放免费视频| 久久久久久久999精品视频| 2021久久精品国产99国产精品| 精品国产31久久久久久| 中文字幕免费精品一区高清| 国产在线一区二区三区| 一区二区三欧美| 中文字幕日韩视频| 夜色77av精品影院| 91精品视频网站| 亚洲美女免费精品视频在线观看| 成人黄色片网站| 久久精品电影网| xvideos国产精品| 这里只有精品视频| 亚洲美女视频网站| 91免费在线视频网站| 欧美国产欧美亚洲国产日韩mv天天看完整| 久久精品国产精品亚洲| 米奇精品一区二区三区在线观看| 亚洲美女av网站| 欧美午夜xxx| 中文字幕欧美精品在线| 5566日本婷婷色中文字幕97| 美女视频久久黄| 97av在线视频免费播放| 欧美丰满少妇xxxxx| 色一情一乱一区二区| 亚洲人成在线观看网站高清| 国外色69视频在线观看| 韩国福利视频一区| 日韩成人在线免费观看| 中文字幕v亚洲ⅴv天堂| 国产精品中文在线| 久久久久国产精品www| 日韩av网站在线| 尤物99国产成人精品视频| 成人淫片在线看| 中国china体内裑精亚洲片| 国内免费精品永久在线视频| 亚洲在线第一页| 亚洲天堂免费观看| 成人福利网站在线观看11| 色综合久久久久久中文网| 成人国产精品一区二区| 欧美老少做受xxxx高潮| 午夜欧美不卡精品aaaaa| 亚洲电影免费观看| 亚洲欧洲一区二区三区在线观看| 2019亚洲男人天堂| 国产成人自拍视频在线观看| 久久久久久久亚洲精品| 久久亚洲精品小早川怜子66| 久久精品久久久久久国产 免费| 91精品免费视频| 国产精品久久不能| 亚洲欧美日韩国产中文| 欧美日韩国产在线| 国语自产精品视频在线看一大j8| 92看片淫黄大片看国产片| 欧亚精品中文字幕| 精品小视频在线| 中文字幕日韩有码| 91久久久久久久久久久| 亚洲最大av网站| 国产欧美一区二区三区久久人妖| 日韩极品精品视频免费观看| 久久人人爽人人爽爽久久| 久久免费视频这里只有精品| 日韩中文字幕在线视频| 在线观看欧美日韩国产| 国产成人小视频在线观看| 亚洲精品一区二区三区不| 亚洲欧美国产制服动漫| 在线精品国产成人综合| 日本不卡免费高清视频| 91精品国产免费久久久久久| 日韩精品在线看| 国产精品一区二区久久| 欧美性猛交xxxx黑人猛交| 国产精品免费一区二区三区都可以|