模式意圖:在不破壞封裝性前提下,捕獲對象內部狀態並在對象外部保存,以便日後恢復至該狀態。
應用場景:Message 實體類有 Insert() 操作,僅在時間符合條件時才能插入成功。需保存/恢復對象狀態:插入失敗 → 恢復狀態 → 更新時間 → 重試。
封裝需保存的狀態 (Message 內容、PublishTime 發布時間),提供建構函數與屬性存取:
public class MessageModel
{
public MessageModel(string msg, DateTime pt)
{
_message = msg;
_publishTime = pt;
}
private string _message;
public string Message { get => _message; set => _message = value; }
private DateTime _publishTime;
public DateTime PublishTime { get => _publishTime; set => _publishTime = value; }
}
備忘錄對外可讀寫,但發起人 (SqlMessage) 可完全存取;管理者 (Caretaker) 僅持有引用 — 三角色權責劃分清晰。