負責保存備忘錄對象,不檢查內容:
public class MessageModelCaretaker
{
private MessageModel _messageModel;
public MessageModel MessageModel
{
get => _messageModel;
set => _messageModel = value;
}
}
擁有內部狀態 (_message, _publishTime),提供備忘錄建立與恢復:
public class SqlMessage
{
private string _message;
public string Message { get => _message; set => _message = value; }
private DateTime _publishTime;
public DateTime PublishTime { get => _publishTime; set => _publishTime = value; }
public bool Insert(MessageModel mm)
{
// 僅示例:秒數可被5整除才成功
return mm.PublishTime.Second % 5 == 0;
}
public MessageModel SaveMemento()
{
return new MessageModel(_message, _publishTime);
}
public void RestoreMemento(MessageModel mm)
{
_message = mm.Message;
_publishTime = mm.PublishTime;
}
}
MessageModel 即備忘錄,封裝狀態快照。Caretaker 僅持有引用,不知內容細節 — 符合模式定義。