الگوهای طراحی راه حل های اثبات شده ای برای مشکلات طراحی نرمافزار هستند. آنها به بهبود کیفیت کد، ارتقای قابلیت استفاده مجدد و افزایش قابلیت نگهداری کمک می کنند. ما از آنها برای صرفهجویی در زمان و تولید کد های با کیفیت، توسعهپذیر و انعطافپذیر استفاده میکنیم. در این مطلب قصد داریم الگوی طراحی Memento را معرفی کنیم.
الگوی طراحی Memento یک الگوی رفتاری(behavioral) است که به یک شی اجازه میدهد حالت قبلی خود را ذخیره کند تا بعداً بدون مشکل بتواند به آن حالت بازگردد. این الگو در مواقعی مفید است که میخواهید یک شی را به حالت قبلی بازیابی کنید یا زمانی که نیاز به لغو یک سری اقدامات دارید.
الگوی Memento از سه جزء اصلی تشکیل شده است:
در ادامه یک مثال ساده از نحوه پیاده سازی الگوی Memento در سی شارپ آورده شده است:
class Originator
{
private string _state;
public void SetState(string state)
{
_state = state;
}
public Memento CreateMemento()
{
return new Memento(_state);
}
public void RestoreMemento(Memento memento)
{
_state = memento.GetState();
}
public void ShowState()
{
Console.WriteLine($"Current state: {_state}");
}
}
class Memento
{
private readonly string _state;
public Memento(string state)
{
_state = state;
}
public string GetState()
{
return _state;
}
}
class Caretaker
{
private Memento _memento;
public void SaveState(Originator originator)
{
_memento = originator.CreateMemento();
}
public void RestoreState(Originator originator)
{
originator.RestoreMemento(_memento);
}
}
// Usage example
var originator = new Originator();
var caretaker = new Caretaker();
originator.SetState("State 1");
originator.ShowState(); // Current state: State 1
caretaker.SaveState(originator);
originator.SetState("State 2");
originator.ShowState(); // Current state: State 2
caretaker.RestoreState(originator);
originator.ShowState(); // Current state: State 1
در این مثال، ابتدا یک شئ Originator که همان شیئی است که باید وضعیت آن را ذخیره بکنیم، ایجاد میشود. سپس برای مدیریت وضعیت این شئ یک نمونه از Caretaker ایجاد میکنیم. در طول برنامه هرچندبار که بخواهیم میتوانیم وضعیت های مختلف را به شئ originator اختصاص دهیم. در صورتی که بخواهیم وضعیت فعلی آن را ذخیره کنیم با استفاده از شئ caretaker ایجاد شده و فراخوانی متد SaveState این کار را انجام میدهیم. در ادامه اگر بخواهیم به وضعیت قبلی برگردیم باید با استفاده از شئ caretaker و فراخوانی متد RestoreState این کار را انجام دهیم.
الگوی طراحی Memento یک الگوی رفتاری مفید است که به یک شی اجازه میدهد وضعیت خود را ذخیره و بازیابی کند. با استفاده از این الگو، میتوانیم تاریخچه وضعیت شیء را حفظ کنیم و امکان undo/redo را در یک برنامه کاربردی فراهم کنیم.
برای مطالعه سایر الگو های طراحی، میتوانید از لیست زیر استفاده کنید. همچنین یک مخزن کد در گیت هاب که شامل همهی الگو های طراحی میشود، برای شما قرار گرفته است.
من محمدرضا باباخانی هستم، توسعه دهنده نرم افزار. در اینجا تجربیات، نظرات و پیشنهادات خودم رو درباره تکنولوژی مینویسم. امیدوارم مطالبی که مینویسم بدردتون بخوره.
ثبت دیدگاه