1. مومنٹو پیٹرن کیا ہے

مومنٹو پیٹرن ایک برتاؤی نقشہ ڈیزائن پیٹرن ہے جو ایک اشیاء کی اندرونی حالت کو محفوظ اور بحال کرنے کے لئے استعمال ہوتا ہے۔ یہ اشیاء کی حالت کو مومنٹو اشیاء میں محفوظ کرتا ہے، جو مستقبل میں اشیاء کو پچھلی حالت میں بحال کرنے کے لئے استعمال کیا جا سکتا ہے۔

2. مومنٹو پیٹرن کی خصوصیات اور فوائد

مومنٹو پیٹرن کی خصوصیات اور فوائد مندرجہ ذیل ہیں:

  • یہ اشیاء کی اندرونی حالت کو محفوظ اور بحال کرنے کے لئے محفوظ اصول کو ناپسند نہیں کرتا۔
  • یہ اشیاء کی تاریخی حالتوں کو موزون طریقے سے منظم کرتا ہے، جو واپسی اور دوبارہ کاری عمل کرنے کے لئے آسان بناتا ہے۔
  • یہ اشیاء کی حالت کو بیرونی طریقے سے محفوظ کرنے دیتا ہے، جو اشیاء کی اندرونی حالت کو ظاہر کرنے سے بچاتا ہے۔

3. مومنٹو پیٹرن کے عملی استعمال کے مثالیں

مومنٹو پیٹرن کے کئی عملی استعمالی مناظر، جن میں سے کچھ مثالیں یہ ہیں:

  • ٹیکسٹ ایڈیٹرز میں واپسی اور دوبارہ کاری کی فعالیت، جو ہر عمل کی حالت کو محفوظ کرنے کے لئے مومنٹو پیٹرن کا استعمال کر سکتی ہے۔
  • گیمز میں محفوظ اور لوڈ کرنے کی فعالیت، جو گیم کی پیش رفت کو محفوظ کرنے کے لئے مومنٹو پیٹرن استعمال کر سکتی ہے۔
  • ای میل کلائنٹس میں ڈرافٹ محفوظ کرنے کی خصوصیت، جو ڈرافٹ ای میل کی حالت کو محفوظ کرنے کے لئے مومنٹو پیٹرن استعمال کر سکتی ہے۔

4. مومنٹو پیٹرن کا گولانگ میں عمل انگیزان

4.1. UML کلاس شکل

گولانگ میں مومنٹو پیٹرن

4.2. مثال کی تعارف

UML Class شکل کے بنیاد پر تفصیل

اس مثال میں، ہمارے پاس ایک ماخذ کلاس ہے جس میں "حالت" کہلاتی اندرونی حالت ہے۔ ماخذ، "حالت" کو SetState ترکیب کا استعمال کر کے حالت کو ترتیب دیتا ہے اور CreateMemento ترکیب کا استعمال کرکے ایک مومنٹو اشیاء بناتا ہے۔ مومنٹو اشیاء کی اندرونی حالت ماخذ کے برابر ہوتی ہے۔ Caretaker کلاس کو مومنٹو اشیاء کو محفوظ کرنا اور AddMemento ترکیب کا استعمال کر کے مومنٹوز کو شامل کرنے کا ذمہ دار ہوتا ہے۔

عمل کرنے کے اقدامات

  1. Memento اشیاء بنائیں، جس میں GetState ترکیب ہو کہ اندرونی حالت کو ماخذ کی محفوظ رکھے۔
  2. Originator اشیاء بنائیں، جس میں حالت کو ترتیب دینے اور ایک مومنٹو بنانے کی تراکیب ہوں۔
  3. Caretaker اشیاء بنائیں، جو مومنٹو اشیاء کو محفوظ کرنے کے ذمہ دار ہوں۔
  4. Originator میں مومنٹو بنانے اور حالت بحال کرنے کے اقدامات پر عمل کریں:
    • جب مومنٹو اشیاء بنایں، تو ماخذ کی حالت کو مومنٹو میں محفوظ کریں۔
    • جب حالت بحال کریں، تو حالت کو مومنٹو سے ماخذ میں بحال کریں۔
  5. Caretaker میں مومنٹو شامل کرنے اور مومنٹو حاصل کرنے کے اقدامات پر عمل کریں:
    • مومنٹو شامل کرنے والا اقدام، مومنٹو اشیاء کو Caretaker میں محفوظ کرنے کے لئے استعمال ہوتا ہے۔
    • مومنٹو حاصل کرنے والا اقدام، Caretaker سے مومنٹو اشیاء کو حاصل کرنے کے لئے استعمال ہوتا ہے۔

4.3.1. Memento اشیاء بنانا

type Memento struct {
	state string
}

func (m *Memento) GetState() string {
	return m.state
}

4.3.2. Memento میں حالت محفوظ کرنا

type Originator struct {
	state string
}

func (o *Originator) SetState(state string) {
	o.state = state
}

func (o *Originator) CreateMemento() *Memento {
	return &Memento{state: o.state}
}

4.3.3. Memento سے حالت بحال کرنا

func (o *Originator) SetMemento(memento *Memento) {
	o.state = memento.GetState()
}

4.3.4. مومنٹو پیٹرن استعمال کرنا برائے ان دو کارروائیاں

type Caretaker struct {
	mementos []*Memento
}

func (c *Caretaker) AddMemento(m *Memento) {
	c.mementos = append(c.mementos, m)
}

func (c *Caretaker) GetMemento(index int) *Memento {
	return c.mementos[index]
}

4.3.5. دوبارہ عمل کے لیے مینٹو پیٹرن استعمال کرنا

func main() {
	originator := &Originator{}
	caretaker := &Caretaker{}

	originator.SetState("حالت 1")
	caretaker.AddMemento(originator.CreateMemento())

	originator.SetState("حالت 2")
	caretaker.AddMemento(originator.CreateMemento())

	originator.SetMemento(caretaker.GetMemento(0))
	fmt.Println("دوبارہ حالت 1 کی بحالی کے بعد ابتدائی حالت:", originator.state)

	originator.SetMemento(caretaker.GetMemento(1))
	fmt.Println("دوبارہ حالت 2 کی بحالی کے بعد ابتدائی حالت:", originator.state)
}