1. মেমেন্টো প্যাটার্ন কি

মেমেন্টো প্যাটার্ন হলো একটি ব্যাবহারকারী ডিজাইন প্যাটার্ন, যা একটি অবজেক্টের অভ্যন্তরীণ অবস্থা সংরক্ষণ এবং পুনরুদ্ধার করতে ব্যবহৃত হয়। এটি অবজেক্টের অবস্থা একটি মেমেন্টো অবজেক্টে সংরক্ষণ করে, যা ভবিষ্যতে অবজেক্টকে পূর্ববর্তী অবস্থায় পুনরুদ্ধার করার জন্য ব্যবহৃত হতে পারে।

2. মেমেন্টো প্যাটার্নের বৈশিষ্ট্য এবং সুবিধাসমূহ

মেমেন্টো প্যাটার্নের বৈশিষ্ট্য এবং সুবিধাসমূহ অন্তর্ভুক্ত করে:

  • এটি অবজেক্টের অভ্যন্তরীণ অবস্থা সংরক্ষণ এবং পুনরুদ্ধার করতে পর্যাপ্ত ভাবে ম্যানেজ করতে পারে এবং ইনক্লুজনের সিদ্ধান্তকে লঙ্ঘন না করে।
  • এটি অবজেক্টের ইতিহাস অবস্থাগুলি সহজে ম্যানেজ করতে সহায়ক, যাতে আন-ডু এবং রিডু অপারেশন সহজে করা যায়।
  • এটি অবজেক্টের অভ্যন্তরীণ অবস্থা ফাঁস না ফাঁস করে, বহিঃথেকে অবস্থা সংরক্ষণ করার সুযোগ দেয়।

3. মেমেন্টো প্যাটার্নের প্রায়োগিক অ্যাপ্লিকেশানের উদাহরণ

মেমেন্টো প্যাটার্নের কিছু ব্যাবহারের উদাহরণ মন্তব্য করুন:

  • টেক্সট এডিটরে আন-ডু এবং রিডু ফাংশনালিটি, যা প্রতিটি অপারেশনের অবস্থা সংরক্ষণের জন্য মেমেন্টো প্যাটার্ন ব্যবহার করতে পারে।
  • গেমে সেভ এবং লোড ফাংশনালিটি, যা খেলার অগ্রগতি সংরক্ষণের জন্য মেমেন্টো প্যাটার্ন ব্যবহার করতে পারে।
  • ইমেইল ক্লায়েন্টে ড্রাফ্ট স্টোরেজ ফিচার, যা মেমেন্টো প্যাটার্ন ব্যবহার করে ড্রাফ্ট ইমেইলের অবস্থা সংরক্ষণ করতে পারে।

4. গোল্ডে মেমেন্টো প্যাটার্নের অনুপ্রযুক্তি

4.1. ইউএমএল ক্লাস ডায়াগ্রাম

গোল্ডে মেমেন্টো প্যাটার্ন

4.2. উদাহরণ পরিচিতি

ইউএমএল ক্লাস ডায়াগ্রামের উপরে ভিত্তি করে বর্ণনা

এই উদাহরণে, আমাদের একটি অরিজিনেটর ক্লাস আছে, যা "অবস্থা" নামক একটি অভ্যন্তরীণ অবস্থা সহ। অরিজিনেটরটি অবস্থা সেট করা যায় SetState মেথড দ্বারা এবং একটি মেমেন্টো অবজেক্ট তৈরি করা যায় CreateMemento মেথড দ্বারা। মেমেন্টো অবজেক্টের অভ্যন্তরীণ অবস্থা অরিজিনেটরের অবস্থার মতো। কেয়ারটেকার ক্লাস মেমেন্টো অবজেক্ট সংরক্ষণ এবং AddMemento মেথড দ্বারা মেমেন্টো যোগ করা নিয়মিত।

অনুষ্ঠান পদক্ষেপ

  1. Memento অবজেক্ট তৈরি করুন, যা অরিজিনেটরের অভ্যন্তরীণ অবস্থা সংরক্ষণ করতে GetState মেথড রয়েছে।
  2. অরিজিনেটর অবজেক্ট তৈরি করুন, যা অবস্থা সেট করার মেথড এবং একটি মেমেন্টো তৈরি করতে রয়েছে।
  3. কেয়ারটেকার অবজেক্ট তৈরি করুন, যা মেমেন্টো অবজেক্ট সংরক্ষণ করার দায়িত্ব নেয়।
  4. অরিজিনেটরের মেথড তৈরি এবং অবস্থা পুনঃস্থাপনের মেথড উপাদান করুন:
    • যখন মেমেন্টো অবজেক্ট তৈরি করা হয়, তখন মেমেন্টোতে অরিজিনেটরের অবস্থা সংরক্ষণ করুন।
    • অবস্থা পুনঃস্থাপনের সময়, অবস্থা মেমেন্টো থেকে পুনরুদ্ধার করুন।
  5. কেয়ারটেকারে মেমেন্টো যোগ করা এবং মেমেন্টো পেতের মেথড উপাদান করুন:
    • মেমেন্টো যোগ করার জন্য মেমেন্টো অবজেক্ট কেয়ারটেকারে সংরক্ষণ করার জন্য ব্যবহৃত হয়।
    • মেমেন্টো পেতের জন্য মেমেন্টো অবজেক্ট কেয়ারটেকার থেকে পুনঃপ্রাপ্ত করার জন্য ব্যবহৃত হয়।

4.3.1. একটি মেমেন্টো অবজেক্ট তৈরি করুন

type Memento struct {
	state string
}

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

4.3.2. মেমেন্টো এবং অবস্থা মেমেন্টো অবজেক্টে সংরক্ষণ করুন

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. মেমেন্টো থেকে অবস্থা পুনঃস্থাপন করুন

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)
}