برنامه نویس فان | Fun Developer یک آدم ساده که عاشق برنامه نویسی و کد زدنه :) تلاش میکنه تا به بقیه کمک کنه. توسعه دهنده هسته لاراول و فضای اوپن سورس. فاندر پرانتز و کد نیوز.

📌 دیزاین پترن Memento چیه؟
اگر در برنامهای نیاز به قابلیت Undo/Redo یا ذخیره تاریخچه وضعیت یک شی داشته باشید، این الگو به کمک شما میآید. به جای ذخیره مستقیم وضعیت در بیرون از کلاس، از یک Memento (حافظه موقت) برای نگهداری اطلاعات استفاده میشود.
🎯 اجزای اصلی در Memento دیزاین پترن
-
Originator → شیای که میخواهیم وضعیتش را ذخیره و بازگردانی کنیم.
-
Memento → کلاس نگهدارنده وضعیت شی بدون افشای جزئیات داخلی.
-
Caretaker → مدیر Mementoها که چندین نسخه از وضعیت را ذخیره و در صورت نیاز بازیابی میکند.
✨کاربردهای این الگو
-
پیادهسازی قابلیت Undo/Redo در ویرایشگرهای متن، فرمها و نرمافزارهای گرافیکی.
-
ذخیرهسازی وضعیت بازیها در هر مرحله و بازگرداندن آن.
-
مدیریت تنظیمات کاربر و امکان بازگردانی تغییرات.
👩💻 مثال دیزاین پترن Memento در گولنگ
package main
import "fmt"
// Memento ذخیرهکننده وضعیت
type Memento struct {
state string
}
// Originator که وضعیتش ذخیره میشود
type Originator struct {
state string
}
func (o *Originator) SaveToMemento() Memento {
return Memento{state: o.state}
}
func (o *Originator) RestoreFromMemento(m Memento) {
o.state = m.state
}
func (o *Originator) SetState(state string) {
o.state = state
}
func (o *Originator) GetState() string {
return o.state
}
// Caretaker برای نگهداری Mementoها
type Caretaker struct {
history []Memento
}
func (c *Caretaker) Add(m Memento) {
c.history = append(c.history, m)
}
func (c *Caretaker) Get(index int) Memento {
return c.history[index]
}
func main() {
originator := Originator{}
caretaker := Caretaker{}
originator.SetState("State 1")
caretaker.Add(originator.SaveToMemento())
originator.SetState("State 2")
caretaker.Add(originator.SaveToMemento())
originator.RestoreFromMemento(caretaker.Get(0))
fmt.Println("Restored State:", originator.GetState()) // Output: Restored State: State 1
}
در اینجا ما اومدیم وضعیت قبلی Originator
داخل آبجکت Memento
ریختیم و همینطور یک تاریخچه داریم به نام Caretaker
که وضعیت های قبلی Memento
ذخیره میکنه و هر زمان که بخواید میتونید بهش دسترسی داشته باشید.
اولین نفر باش که نظر ثبت میکنی :) یعنی یه کامنت به ما نمیرسه 😁