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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

Net设计模式实例之备忘录模式(Memento Pattern)

發布時間:2025/3/13 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Net设计模式实例之备忘录模式(Memento Pattern) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、備忘錄模式簡介(Brief Introduction

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

二、解決的問題(What To Solve

?????? 當系統功能比較復雜,而且需要記錄歷史屬性以便當需要時做恢復動作。Originator可以根據保存的Memento信息還原到前一狀態。???

三、備忘錄模式分析(Analysis

1、備忘錄模式結構

Originator:發起人。

CreateMemento方法,負責創建一個備忘錄,用于記錄當前時刻它的內部狀態。

SetMemento方法,使用備忘錄回復狀態。

Show方法,展示狀態。

Originator類:可以決定備忘錄Memento存儲Originator的哪些狀態。

Memento類:備忘錄,負責存儲Originator的內部狀態,并可防止Originator以外的其他對象訪問備忘錄Memento

Caretaker類:負責保存備忘錄Memento,不能對備忘錄的內容進行操縱和檢查。

2、備忘錄模式代碼

1、發起人類Originator

public class Originator

{

??? private string _state;

?

??? public string State

??? {

??????? get { return _state; }

??????? set { _state = value; }

??? }

??? /// <summary>

??? /// 創建備忘錄,將當前要保存的信息導入并實例化備忘錄

??? /// </summary>

??? public Memento CreateMemento()

??? {

??????? return (new Memento(this.State));

??? }

?

??? /// <summary>

??? /// 恢復備忘錄,將Memento導入并將相關數據恢復

??? /// </summary>

??? /// <param name="memento"></param>

??? public void SetMemento(Memento memento)

??? {

??????? this.State = memento.State;

??? }

?

??? /// <summary>

??? /// 展示狀態數據

??? /// </summary>

??? public void Show()

??? {

??????? Console.WriteLine("當前狀態是:"+this.State);

??? }

}

?

2、備忘錄類Memento

public class Memento

{

??? private string _state;

?

??? public string State

??? {

??????? get { return _state; }

??????? set { _state = value; }

??? }

?

??? public Memento(string state)

??? {

??????? this.State = state;

??? }

}

?

3、管理者類Caretaker

public class Caretaker

{

??? private Memento _memento;

?

??? public Memento Memento

??? {

??????? get { return _memento; }

??????? set { _memento = value; }

??? }

}

?

?

4、客戶端代碼

static void Main(string[] args)

{

??? Originator o = new Originator();

??? //初始狀態為On

??? o.State = "On";

??? o.Show();

?

??? //創建備忘錄并保存狀態

??? Caretaker caretaker = new Caretaker();

??? caretaker.Memento=o.CreateMemento();

?

??? //更改Originator狀態=Off

??? o.State = "Off";

??? o.Show();

?

??? //恢復到原始狀態

??? o.SetMemento(caretaker.Memento);

??? o.Show();

?

??? Console.ReadKey();

}

?

3、備忘錄模式運行結果

四.實例分析(Example

1、場景

首先定義銷售代理Noel van Halen的相關信息.然后保存到備忘錄中,而定義銷售代理Leo Welch相關信息。然后又回覆前一代理Noel van Halen的信息。。結構如下圖所示

SalesProspect:發起人

SaveMemento方法:創建備忘錄

RestoreMemento方法:回覆備忘錄

Memento:備忘錄,需要備份的信息有姓名、電話和預算

ProspectMemory:負責保存備忘錄Memento

2、代碼

1、發起人類SalesProspect

class SalesProspect

{

??? private string _name;

??? private string _phone;

??? private double _budget;

??? public string Name

?? ?{

??????? get { return _name; }

??????? set

??????? {

??????????? _name = value;

??????????? Console.WriteLine("Name:? " + _name);

??????? }

??? }

??? public string Phone

??? {

??????? get { return _phone; }

??????? set

??????? {

??????????? _phone = value;

??????????? Console.WriteLine("Phone: " + _phone);

??????? }

??? }

??? public double Budget

??? {

??????? get { return _budget; }

??????? set

??????? {

??????????? _budget = value;

??????????? Console.WriteLine("Budget: " + _budget);

??????? }

??? }

?? ?public Memento SaveMemento()

??? {

??????? Console.WriteLine("\nSaving state --\n");

??????? return new Memento(_name, _phone, _budget);

??? }

??? public void RestoreMemento(Memento memento)

??? {

??????? Console.WriteLine("\nRestoring state --\n");

???? ???this.Name = memento.Name;

??????? this.Phone = memento.Phone;

??????? this.Budget = memento.Budget;

??? }

}

?

2、備忘錄類Memento

class Memento

{

??? private string _name;

??? private string _phone;

??? private double _budget;

??? public Memento(string name, string phone, double budget)

??? {

??????? this._name = name;

??????? this._phone = phone;

??????? this._budget = budget;

??? }

??? public string Name

??? {

??????? get { return _name; }

??????? set { _name = value; }

??? }

??? public string Phone

??? {

??????? get { return _phone; }

??????? set { _phone = value; }

??? }

??? public double Budget

??? {

??????? get { return _budget; }

??????? set { _budget = value; }

??? }

}

?

3、管理者類ProspectMemory

class ProspectMemory

{

??? private Memento _memento;

??? // Property

??? public Memento Memento

??? {

??????? set { _memento = value; }

??????? get { return _memento; }

??? }

}

?

3、客戶端代碼

static void Main(string[] args)

{

??? SalesProspect s = new SalesProspect();

??? s.Name = "Noel van Halen";

??? s.Phone = "(412) 256-0990";

??? s.Budget = 25000.0;

??? // Store internal state

??? ProspectMemory m = new ProspectMemory();

??? m.Memento = s.SaveMemento();

?

??? // Continue changing originator

??? s.Name = "Leo Welch";

??? s.Phone = "(310) 209-7111";

??? s.Budget = 1000000.0;

??? // Restore saved state

??? s.RestoreMemento(m.Memento);

??? Console.ReadKey();

}

3、實例運行結果

五、總結(Summary

本文對備忘錄模式設計思想、結構和結構代碼進行了分析,并以一實例進一步闡述了備忘錄模式的C#實現。

轉載于:https://www.cnblogs.com/ywqu/archive/2010/01/25/1655581.html

總結

以上是生活随笔為你收集整理的Net设计模式实例之备忘录模式(Memento Pattern)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 婷婷在线免费视频 | 草民午夜理伦三级 | 懂色av一区二区三区 | 91黄免费| 亚洲欧美视频一区二区 | 精品免费 | 国产精品二区一区二区aⅴ 一卡二卡三卡在线观看 | 欧美黑人性xxx猛交 少妇无套内谢久久久久 | 黄色片特级 | 91精品国产欧美一区二区 | 欧美精品毛片 | 国产一区二区三区www | 国产成人av影院 | 青青青手机在线视频 | 无码熟妇αⅴ人妻又粗又大 | 青青草伊人网 | 91操人视频 | 欧美精品一区二区三区蜜臀 | 午夜精品视频一区二区三区在线看 | 欧美激情999| 无套中出丰满人妻无码 | 国产精品69久久久久孕妇欧美 | 国产视频一二区 | 国产精品腿扒开做爽爽爽挤奶网站 | 中文字幕有码在线视频 | 在线视频1卡二卡三卡 | 亚洲精品入口 | 欧美精选一区二区 | 一区二区在线免费看 | 日本中文在线视频 | 免费看操片 | 一乃葵在线 | 久操视频在线观看 | 超碰青娱乐 | 91成人综合 | 欧美激情一区二区三区 | 色姑娘久| www.日韩一区 | 免费国产一级 | 亚洲砖区区免费 | 男女视频国产 | 已满十八岁免费观看 | 日韩性猛交ⅹxxx乱大交 | 99嫩草| avtt亚洲| 永久免费观看av | 九色自拍 | 久久.com| 国产5区 | 麻豆导航 | 五十路中文字幕 | 最近中文字幕在线mv视频在线 | 亚洲国产精品成人久久蜜臀 | 亚洲第一精品网站 | 成人av免费网站 | 欧美一级视频 | 亚洲第一视频 | 午夜免费看 | 国产免费黄色录像 | 7777av| 在线亚洲天堂 | 91精品推荐 | 人人艹视频 | 久久综合国产精品 | 跪求黄色网址 | 四虎网站在线播放 | 免费在线色 | 欧美r级在线观看 | 99插插插| 狠狠操网址| 少妇人妻综合久久中文字幕 | 在线免费观看一区二区 | 无码 制服 丝袜 国产 另类 | 小蝌蚪av | 五月婷网站 | 999久久久免费精品国产 | 欧美乱人伦 | 久99热 | 激情婷婷综合 | 国产精品xxxxx| 国产一级二级视频 | 8mav在线| 人妻精品无码一区二区 | 麻豆视频在线免费观看 | 91丨国产丨捆绑调教 | 欧美精品久久久久久久久老牛影院 | 国产在线一二区 | 日本一区视频在线播放 | 亚洲毛片在线看 | 久热精品免费视频 | 国产一区二区三区在线免费 | jizz免费视频 | 亚洲天堂影视 | 国产在线播放一区二区 | 九九精品免费 | 69式视频| 久久爱一区 | 性色生活片 | 久久怡红院 |