1. Apa itu Pola Memento
Pola Memento adalah pola desain perilaku yang digunakan untuk menyimpan dan mengembalikan keadaan internal suatu objek. Pola ini menyimpan keadaan objek ke objek memento, yang dapat digunakan untuk mengembalikan objek ke keadaan sebelumnya di masa depan.
2. Karakteristik dan Keuntungan Pola Memento
Karakteristik dan keuntungan dari Pola Memento meliputi:
- Dapat menyimpan dan mengembalikan keadaan internal suatu objek tanpa melanggar prinsip enkapsulasi.
- Dapat mengelola secara fleksibel keadaan-keadaan historis suatu objek, sehingga memudahkan untuk melakukan operasi undo dan redo.
- Memungkinkan keadaan untuk disimpan secara eksternal, menghindari paparan keadaan internal objek.
3. Contoh Aplikasi Praktis dari Pola Memento
Pola Memento memiliki berbagai skenario aplikasi praktis, beberapa contohnya meliputi:
- Fungsi undo dan redo dalam editor teks, yang dapat menggunakan Pola Memento untuk menyimpan keadaan setiap operasi.
- Fungsi simpan dan muat dalam permainan, yang dapat menggunakan Pola Memento untuk menyimpan kemajuan permainan.
- Fitur penyimpanan draf dalam klien email, yang dapat menggunakan Pola Memento untuk menyimpan keadaan email draf.
4. Implementasi Pola Memento dalam Golang
4.1. Diagram Kelas UML
4.2. Pengantar Contoh
Deskripsi Berdasarkan Diagram Kelas UML
Pada contoh ini, kita memiliki kelas Originator dengan keadaan internal bernama "state". Originator mengatur keadaan menggunakan metode SetState dan membuat objek memento menggunakan metode CreateMemento. Keadaan internal objek memento sama dengan Originator. Kelas Caretaker bertanggung jawab untuk menyimpan objek memento dan menambahkan memento menggunakan metode AddMemento.
Langkah-langkah Implementasi
- Membuat objek Memento, yang memiliki metode GetState untuk menyimpan keadaan internal Originator.
- Membuat objek Originator, yang memiliki metode untuk mengatur keadaan dan membuat memento.
- Membuat objek Caretaker, yang bertanggung jawab untuk menyimpan objek memento.
- Mengimplementasikan metode untuk membuat memento dan mengembalikan keadaan di Originator:
- Saat membuat objek memento, simpan keadaan Originator di memento.
- Saat mengembalikan keadaan, kembalikan keadaan dari memento ke Originator.
- Mengimplementasikan metode untuk menambahkan memento dan mendapatkan memento di Caretaker:
- Metode tambahkan memento digunakan untuk menyimpan objek memento di Caretaker.
- Metode dapatkan memento digunakan untuk mengambil objek memento dari Caretaker.
4.3.1. Membuat Objek Memento
type Memento struct {
state string
}
func (m *Memento) GetState() string {
return m.state
}
4.3.2. Menyimpan Keadaan dalam 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. Mengembalikan Keadaan dari Memento
func (o *Originator) SetMemento(memento *Memento) {
o.state = memento.GetState()
}
4.3.4. Menggunakan Pola Memento untuk Operasi Undo
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. Menggunakan Pola Memento untuk Operasi Redo
func main() {
originator := &Originator{}
caretaker := &Caretaker{}
originator.SetState("State 1")
caretaker.AddMemento(originator.CreateMemento())
originator.SetState("State 2")
caretaker.AddMemento(originator.CreateMemento())
originator.SetMemento(caretaker.GetMemento(0))
fmt.Println("Status asal setelah dipulihkan ke state 1:", originator.state)
originator.SetMemento(caretaker.GetMemento(1))
fmt.Println("Status asal setelah dipulihkan ke state 2:", originator.state)
}