日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

『设计模式』备忘录模式(memento)下象棋,我就想悔棋怎么办

發布時間:2023/12/15 asp.net 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 『设计模式』备忘录模式(memento)下象棋,我就想悔棋怎么办 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

23種設計模式+額外常用設計模式匯總 (持續更新)

Memento模式的關鍵就是要在不破壞封裝性的前提下,捕獲一個對象的內部狀態并在該對象之外保存這個狀態。這樣以后就可以利用該保存的狀態實施恢復操作。

模式結構

  • Originator(原發器)
    創建一個備忘錄,并存儲它的當前內部狀態,也可以使用備忘錄來回復其內部狀態。
  • Memento(備忘錄)
    儲存原發器的內部狀態,備忘錄的設計一般可以參考原發器的設計,根據實際需要確定備忘錄類中的屬性。
  • Caretaker(負責人)
    負責人又稱為管理者,在負責人類中可以儲存一個或多個備忘錄對象,他只負責存儲對象而不能修改獨享,也無需知道對象的實現細節。

基本代碼

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 menmento){state = menmento.State;}public void Show(){Console.WriteLine("State=" + state);}}//備忘錄類class Memento{private string state;public Memento(string state){this.state = state;}public string State{get { return state; }}}//管理者類class Caretaker{private Memento memento;public Memento Memento{get { return memento; }set { memento = value; }}}class Program{static void Main(string[] args){Originator o = new Originator();o.State = "On";o.Show();Caretaker c = new Caretaker();c.Memento = o.CreateMemento();o.State = "Off";o.Show();o.SetMemento(c.Memento);o.Show();Console.Read();}}class="one-pan-link-mark">優點
  • 有時一些發起人對象的內部信息必須保存在發起人對象以外的地方,但是必須要由發起人對象自己讀取。這時,使用備忘錄模式可以把復雜的發起入內部信息對其他的對象屏蔽起來,從而可以恰當地保持封裝的邊界。
  • 本模式簡化了發起人類。發起人不再需要管理和保存其內部狀態的一個個版本,客戶端可以自行管理他們所需要的這些狀態的版本。
  • 當發起人角色的狀態改變的時候,有可能這個狀態無效,這時候就可以使用暫時存儲起來的備忘錄將狀態復原。

缺點

  • 如果發起人角色的狀態需要完整地存儲到備忘錄對象中,那么在資源消耗上面備忘錄對象會很大。
  • 當管理者角色將-一個備忘錄存儲起來的時候,管理者可能并不知道這個狀態會占用多大的存儲空間,從而無法提醒用戶一個操作是否很大。

適用場合

如果必須保存一個對象在某一個時刻的全部或者部分狀態,不方便在以后需要的時候,可以把該對象恢復到先前的狀態,可以使用備忘錄模式

本質

保存和恢復內部狀態。

總結

以上是生活随笔為你收集整理的『设计模式』备忘录模式(memento)下象棋,我就想悔棋怎么办的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。