**یادگاری الگوی** یک الگوی طراحی نرم‌افزار است که توانایی بازگرداندن یک شیء به حالت قبلی خود (خنثیسازی از طریق عقبگرد) را ممکن می‌سازد.

الگوی یادگاری با سه شی پیاده‌سازی می‌شود: *پدیدآورنده*، یک *سرپرست* و یک *یادگاری*. پدیدآورنده است شیی است که به یک وضعیت داخلی دارد. سرپرست می‌خواهد تغییری در پدیدآورنده بدهد اما می‌خواهد قادر به خنثی‌سازی تغییرش باشد. سرپرست اول از پدیدآورنده یک شی یادگاری می‌خواهد. سپس هر عمل (و یا دنباله ای از عملیات) را به انجام می‌رساند. برای برگشت به حالت قبل از عملیات، شی یادگاری را به پدیدآورنده برمی‌گرداند. یادگاری خود یک شی مات است، شیئی که سرپرست نمی‌تواند و نباید تغییر دهد.

ساختار
------

### کلاس UML و نمودار توالی

یک نمونه کلاس UML و نمودار توالی برای الگوی طراحی یادگاری است.

مثال پایتون
-----------

```
"""
Memento pattern example.
"""

class Memento(object):
    def \_\_init\_\_(self, state):
        self.\_state = state

    def get\_saved\_state(self):
        return self.\_state

class Originator(object):
    \_state = ""

    def set(self, state):
        print("Originator: Setting state to", state)
        self.\_state = state

    def save\_to\_memento(self):
        print("Originator: Saving to Memento.")
        return Memento(self.\_state)

    def restore\_from\_memento(self, memento):
        self.\_state = memento.get\_saved\_state()
        print("Originator: State after restoring from Memento:", self.\_state)

saved\_states = []
originator = Originator()
originator.set("State1")
originator.set("State2")
saved\_states.append(originator.save\_to\_memento())

originator.set("State3")
saved\_states.append(originator.save\_to\_memento())

originator.set("State4")

originator.restore\_from\_memento(saved\_states[0])

```

منابع
-----

1. ↑  "The Memento design pattern - Structure and Collaboration". *w3sDesign.com*. Retrieved 2017-08-12.

| * ن
* ب
* و
الگوهای طراحی |
| --- |
| الگوهای طراحی GO4 | 

|  |  |
| --- | --- |
| ایجاد | 
* الگوی کارخانه انتزاعی
* الگوی سازنده
* الگوی متد کارخانه شیء
* الگوی نمونه اولیه
* الگوی یگانه

 |
| ساختاری | 
* آداپتور
* پل
* کامپوزیت
* آذینگر
* نما
* مگس وزن
* وکالت

 |
| رفتاری | 
* زنجیره مسئولیت
* الگوی فرمان
* مفسر
* الگوی تکرار
* میانجی
* یادگاری
* ناظر
* وضعیت
* استراتژی
* متد الگو
* بازدیدگر

 |

 |
| Concurrencypatterns | 
* Active object
* Balking
* Binding properties
* Double-checked locking
* Event-based asynchronous
* Guarded suspension
* Join
* قفل
* مانیتور
* Proactor
* Reactor
* Read write lock
* زمان‌بندی
* الگوی مخزن نخ
* Thread-local storage

 |
| الگوهایمعماری | 
* Front controller
* مفسر
* مدل-نما-کنترل‌گر
* ADR
* Entity-component-system
* چندلایه
* Specification
* Publish–subscribe
* اشیای لخت
* Service locator
* ثبت کنشور
* Identity map
* شی دسترسی به داده
* شی انتقال داده
* وارونگی کنترل
* Model 2

 |
| دیگرالگوها | 
* Blackboard
* Business delegate
* Composite entity
* تزریق نیازمندی
* Intercepting filter
* بارگیری تنبلانه
* شیء ساختگی
* Null object
* استخر اشیاء
* Servant
* Twin
* Type tunnel
* Method chaining

 |
| کتاب‌ها | 
* *الگوهای طراحی*
* *Enterprise Integration Patterns*
* *Patterns of Enterprise Application Architecture*
* *Analysis patterns*

 |
| افراد | 
* کریستوفر الکساندر
* Erich Gamma
* Ralph Johnson
* John Vlissides
* گریدی بوچ
* کنت بک
* وارد کانینگهام
* مارتین فولر
* رابرت سسیل مارتین
* Jim Coplien
* Douglas Schmidt
* Linda Rising

 |
| جوامع | 
* The Hillside Group
* The Portland Pattern Repository

 |