معرفی الگوی طراحی Memento

معرفی الگوی طراحی Memento

مدت مطالعه : 3 دقیقه

25 اردیبهشت 1402

الگوهای طراحی راه حل های اثبات شده ای برای مشکلات طراحی نرم‌افزار هستند. آنها به بهبود کیفیت کد، ارتقای قابلیت استفاده مجدد و افزایش قابلیت نگهداری کمک می کنند. ما از آنها برای صرفه‌جویی در زمان و تولید کد های با کیفیت، توسعه‌پذیر و انعطاف‌پذیر استفاده می‌کنیم. در این مطلب قصد داریم الگوی طراحی Memento را معرفی کنیم.

الگوی طراحی Memento یک الگوی رفتاری(behavioral) است که به یک شی اجازه می‌دهد حالت قبلی خود را  ذخیره کند تا بعداً بدون مشکل بتواند به آن حالت بازگردد. این الگو در مواقعی مفید است که می‌خواهید یک شی را به حالت قبلی بازیابی کنید یا زمانی که نیاز به لغو یک سری اقدامات دارید.

الگوی Memento از سه جزء اصلی تشکیل شده است:

  • Originator: شیئی است که نیاز به ذخیره وضعیت قبلی آن داریم. این کلاس میتواند یک نمونه از وضعیت فعلی خود را در اختیار ما قرار دهد.
  • Memento: شیئی است که وضعیت Originator را در یک نقطه زمانی خاص ذخیره می کند. این کلاس راهی برای بازگرداندن حالت فعلی شئ به حالت قبلی آن است.
  • Caretaker: کلاسی است که وظیفه نگهداری و مدیریت وضعیت های قبلی را بر عهده دارد. برای ذخیره و بازیابی حالت های شئ، از این کلاس استفاده می‌شود.

در ادامه یک مثال ساده از نحوه پیاده سازی الگوی 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 را در یک برنامه کاربردی فراهم کنیم.

برای مطالعه سایر الگو های طراحی، میتوانید از لیست زیر استفاده کنید. همچنین یک مخزن کد در گیت هاب که شامل همه‌ی الگو های طراحی می‌شود، برای شما قرار گرفته است.

design patterns

ایجاد کننده (Creational):الگوی طراحی Factory 
الگوی طراحی Builder 
الگوی طراحی Singleton 
الگوی طراحی Prototype 
الگوی طراحی Abstract Factory 
ساختاری (Structural):الگوی طراحی Adapter 
الگوی طراحی Bridge 
الگوی طراحی Composite 
الگوی طراحی Decorator 
الگوی طراحی Facade 
الگوی طراحی Flyweight 
الگوی طراحی Proxy 
رفتاری (Behavioral):الگوی طراحی Chain of Responsibility 
الگوی طراحی Command 
الگوی طراحی Interpreter 
الگوی طراحی Mediator 
الگوی طراحی Memento 
الگوی طراحی Observer 
الگوی طراحی State 
الگوی طراحی Strategy 
الگوی طراحی Template Method 
الگوی طراحی Visitor 
الگوی طراحی Iterator 
  • اشتراک گذاری:
محمدرضا باباخانی
محمدرضا باباخانی

من محمدرضا باباخانی هستم، توسعه دهنده نرم افزار. در اینجا تجربیات، نظرات و پیشنهادات خودم رو درباره تکنولوژی مینویسم. امیدوارم مطالبی که می‌نویسم بدردتون بخوره.

آخرین مطالب

سرویس مش؛ ساده سازی ارتباطات میکروسرویس و افزایش رؤیت پذیری

در چشم انداز همیشه در حال تحول توسعه نرم افزار، معماری میکروسرویس ها به دلیل مقیاس پذیری، انعطاف پذیری و توسعه پذیری محبوبیت قابل توجهی به دست آورده است. با این حال، با افزایش تعداد میکروسرویس ها در یک برنامه، مدیریت ارتباطات آنها و اطمینان از رؤیت صحیح همه آنها به طور فزاینده ای چالش برانگیز می شود. اینجاست که سرویس مش وارد عمل می شود.

اهمیت محاسبات لبه یا Edge Computing

ا توجه به سرعت تحول فناوری، یکی از مفاهیمی که توجه زیادی را به خود جلب کرده و نحوه تعامل ما با سیستم های دیجیتال را تغییر می دهد، محاسبات لبه (Edge Computing) است.

معماری رویداد محور چیست؟

معماری رویداد محور (EDA) یک الگوی طراحی نرم افزار است که در توسعه نرم افزار های مدرن به طور چشمگیری محبوب شده است. در این معماری، جریان داده ها با وقوع رویدادها تعیین می شود. بر خلاف سیستم های متمرکز سنتی که دائماً در حال بررسی وضعیت جدید هستند. معماری رویداد محور به ویژه برای سیستم هایی مفید است که به پردازش حجم زیادی از داده ها بصورت بلادرنگ(real-time) نیاز دارند.

ثبت دیدگاه