CSharp: Memento Pattern in donet core 6
using Geovin.Du.DuMemento.Conceptual;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Geovin.Du.DuMemento.FoodSupplier
{
/// <summary>
/// 备忘录模式 Memento Pattern亦称: 快照、Snapshot、Memento
/// </summary>
public class FoodSupplier
{
/// <summary>
///
/// </summary>
private string _name = string.Empty;
/// <summary>
///
/// </summary>
private string _phone = string.Empty;
/// <summary>
///
/// </summary>
private string _address = string.Empty;
/// <summary>
///
/// </summary>
public string Name
{
get => _name;
set
{
_name = value;
Console.WriteLine($"食品供应商:名称设置为 {_name}");
}
}
/// <summary>
///
/// </summary>
public string Phone
{
get => _phone;
set
{
_phone = value;
Console.WriteLine($"食品供应商:电话号码设置为 {_phone}");
}
}
/// <summary>
///
/// </summary>
public string Address
{
get => _address;
set
{
_address = value;
Console.WriteLine($"食品供应商:地址设置为{_address}");
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public override string ToString()
{
return $"姓名:{Name} 电话:{Phone} 地址:{ Address}";
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public IMemento Save()
{
Console.WriteLine("\n食品供应商:保存现状...");
return new FoodSupplierMemento(_name, _phone, _address);
}
/// <summary>
/// Restore previous state.
/// Note that the method returns an IMemento instance in order to to facilitate redo operation.
/// The return type can be changed to void if redo doesn't have to be supported.
/// </summary>
/// <param name="memento">Memento for restoration.</param>
/// <returns>Redo memento.</returns>
public IMemento Restore(IMemento memento)
{
Console.WriteLine("\n食品供应商:恢复状态...");
if (memento is not FoodSupplierMemento foodSupplierMemento)
{
throw new ArgumentException($"未知的纪念品: {memento}");
}
var redoMemento = new FoodSupplierMemento(_name, _phone, _address);
Name = foodSupplierMemento.Name;
Phone = foodSupplierMemento.PhoneNumber;
Address = foodSupplierMemento.Address;
return redoMemento;
}
}
}
using Geovin.Du.DuMemento.Conceptual;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Geovin.Du.DuMemento.FoodSupplier
{
/// <summary>
/// 备忘录模式 Memento Pattern亦称: 快照、Snapshot、Memento
/// </summary>
public class SupplierRegistry
{
/// <summary>
///
/// </summary>
private readonly FoodSupplier _supplier;
/// <summary>
///
/// </summary>
private readonly Stack<IMemento> _undoStack;
/// <summary>
///
/// </summary>
private readonly Stack<IMemento> _redoStack;
/// <summary>
///
/// </summary>
/// <param name="supplier"></param>
public SupplierRegistry(FoodSupplier supplier)
{
_supplier = supplier;
_undoStack = new Stack<IMemento>();
_redoStack = new Stack<IMemento>();
}
/// <summary>
///
/// </summary>
public void Backup()
{
Console.WriteLine("\n供应商注册表:备份操作..");
_redoStack.Clear();
_undoStack.Push(_supplier.Save());
}
/// <summary>
///
/// </summary>
public void Undo()
{
Console.WriteLine("\n供应商注册表:正在执行撤销操作...");
var top = _undoStack.Pop();
_redoStack.Push(_supplier.Restore(top));
}
/// <summary>
///
/// </summary>
public void Redo()
{
Console.WriteLine("\n供应商注册表:执行重做操作...");
var top = _redoStack.Pop();
_undoStack.Push(_supplier.Restore(top));
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Geovin.Du.DuMemento.FoodSupplier
{
/// <summary>
/// 备忘录模式 Memento Pattern亦称: 快照、Snapshot、Memento
/// </summary>
public interface IMemento
{
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Geovin.Du.DuMemento.FoodSupplier
{
/// <summary>
/// 备忘录模式 Memento Pattern亦称: 快照、Snapshot、Memento
/// </summary>
public class FoodSupplierMemento : IMemento
{
/// <summary>
///
/// </summary>
/// <param name="name"></param>
/// <param name="phoneNumber"></param>
/// <param name="address"></param>
public FoodSupplierMemento(string name, string phoneNumber, string address)
{
Name = name;
PhoneNumber = phoneNumber;
Address = address;
}
/// <summary>
///
/// </summary>
public string Name { get; set; }
/// <summary>
/// /
/// </summary>
public string PhoneNumber { get; set; }
/// <summary>
///
/// </summary>
public string Address { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Geovin.Du.BuildingBlocks;
namespace Geovin.Du.DuMemento.FoodSupplier
{
/// <summary>
/// 备忘录模式 Memento Pattern亦称: 快照、Snapshot、Memento
/// </summary>
public static class FoodSupplierExecutor
{
/// <summary>
///
/// </summary>
public static void Execute()
{
ConsoleExtension.WriteSeparator("\n备忘录模式 Memento Pattern 食物供应 Food supplier demo");
var foodSupplier = new FoodSupplier
{
Name = "涂氏食品工业公司",
Phone = "8888 1111",
Address = "深圳市罗湖区",
};
var registry = new SupplierRegistry(foodSupplier);
registry.Backup();
foodSupplier.Phone = "8888 2222";
registry.Undo();
registry.Redo();
}
}
}
调用:
Geovin.Du.DuMemento.FoodSupplier.FoodSupplierExecutor.Execute();
输出:
备忘录模式 Memento Pattern 食物供应 Food supplier demo -------------------------------------------------- 食品供应商:名称设置为 涂氏食品工业公司 食品供应商:电话号码设置为 8888 1111 食品供应商:地址设置为深圳市罗湖区 供应商注册表:备份操作.. 食品供应商:保存现状... 食品供应商:电话号码设置为 8888 2222 供应商注册表:正在执行撤销操作... 食品供应商:恢复状态... 食品供应商:名称设置为 涂氏食品工业公司 食品供应商:电话号码设置为 8888 1111 食品供应商:地址设置为深圳市罗湖区 供应商注册表:执行重做操作... 食品供应商:恢复状态... 食品供应商:名称设置为 涂氏食品工业公司 食品供应商:电话号码设置为 8888 2222 食品供应商:地址设置为深圳市罗湖区
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号