1. Definisi
Tanpa menghancurkan enkapsulasi, tangkap keadaan internal suatu objek dan simpan keadaan ini di luar objek. Dengan cara ini, objek dapat dikembalikan ke keadaan yang disimpan semula nanti.
2. Alasan Penggunaan
Ingin mengembalikan keadaan asli objek di beberapa titik.
3. Contoh situasi yang berlaku
Ada banyak aplikasi dari mode memo, tetapi kami telah melihatnya, tetapi kami belum memikirkannya dengan cermat. Ini hanya penggunaan mode memo. Izinkan saya memberi Anda beberapa contoh:
EG1. Penggunaan Memo di JSP+Javabean:
Saat menambahkan akun dalam suatu sistem, Anda perlu mengisi nama pengguna, kata sandi, nomor kontak, alamat, dan informasi lainnya dalam formulir. Jika beberapa bidang tidak diisi atau diisi secara tidak benar, ketika pengguna mengklik tombol "Kirim", Anda perlu menyimpan opsi yang dimasukkan oleh pengguna pada halaman baru dan meminta opsi yang salah. Ini dicapai dengan menggunakan karakteristik SCOPE = "Request" atau SCOPE = "Sesi" dari Javabean, yaitu, dicapai dengan menggunakan mode memo.
EG2. Saat memperbaiki rem mobil. Pertama -tama lepaskan baffle di kedua sisi untuk mengekspos bantalan rem kiri dan kanan. Hanya satu bagian yang dapat dihapus, dan bagian lain berfungsi sebagai memo untuk menunjukkan bagaimana rem dipasang. Hanya setelah perbaikan bagian ini selesai dapat dihapus. Ketika bagian kedua dihapus, bagian pertama menjadi memo.
EG3. Dikatakan bahwa tidak ada obat penyesalan untuk dibeli dalam hidup. Kita semua membayar harga untuk apa yang kita lakukan, tetapi di dunia yang lunak, ada "obat -obatan yang menyesal". Setelah saya mengubah keadaan tertentu dari sesuatu, selama kita menyimpan keadaan tertentu sebelumnya, kita dapat mengembalikan keadaan benda melalui mode memo. Faktanya, ini juga "kotak harta karun sinar bulan" yang dapat memutar waktu, dan kata "sihir" luar biasa.
4. Struktur dan deskripsi diagram kelas
(1) Diagram kelas adalah sebagai berikut:
(2) Deskripsi kelas (i) Memento: Peran Memorandum, karya utamanya adalah sebagai berikut:
Menyimpan keadaan internal objek inisiator;
Itu dapat melindungi isinya dari dibaca oleh objek apa pun selain objek originator.
(ii) pencetus: peran sponsor, terutama menyelesaikan tugas -tugas berikut:
Buat objek memo dengan keadaan internal saat ini;
Gunakan objek memo untuk menyimpan keadaan internalnya.
(iii) Penjaga: Orang yang bertanggung jawab, pekerjaan diselesaikan sebagai berikut:
Bertanggung jawab untuk melestarikan benda memorandum;
Isi objek memo tidak disimpan.
5. Contoh
/ *** Objek Data*/ Kelas Publik DataState {Private String Action; public void setAction (string action) {this.action = action; } public string getAction () {return action; }} /*** Objek yang menyimpan salinan keadaan internal objek lain. Dengan cara ini, objek dapat dipulihkan ke keadaan yang disimpan asli di masa depan. */ impor java.io.file; impor java.io.serializable; Kelas Public Memento Menerapkan Serializable { /*Private Int Number; file file pribadi = null; kenang -kenangan publik (originator o) {this.number = o.getNumber (); this.file = o.getFile (); } public int getNumber () {return this.number; } public void setNumber (int number) {this.number = number; } file publik getFile () {return this.file; } public void setFile (file file) {this.file = file; } */ status datastate pribadi; kenang -kenangan publik (originator o) {this.state = o.getState (); } public datastate getState () {return state; } public void setState (status datastate) {this.state = state; }} Penggagas kelas publik { /* nomor int pribadi; file file pribadi = null; originator publik () {} // Buat kenang -kenangan dan masukkan ke kenang -kenangan publik sebagai parameter publik kenang -kenangan getMemento () {return New Memento (this); } // Keluarkan data yang disimpan dari kenang -kenangan dan kembalikan ke status aslinya public void setMemento (memento m) {number = m.getNumber (); file = m.getFile (); } public int getNumber () {nomor kembali; } public void setNumber (int number) {this.number = number; } file publik getFile () {return file; } public void setFile (file file) {this.file = file; }*/ status datastate pribadi; originator publik () {} originator publik (status datastate) {this.state = state; } // Buat kenang -kenangan dan masukkan ke kenang -kenangan publik sebagai parameter kenang -kenangan publik getMemento () {return New Memento (this); } // Ambil data yang disimpan dari kenang -kenangan dan kembalikan ke status aslinya public void setMemento (kenang -kenangan m) { / * * Objek yang dibuat oleh getMemento () disimpan dalam wadah. * Ketika perlu dipulihkan, pastikan ke dalam metode saat ini, dan kemudian gunakan GetState () untuk mendapatkan */ this.state = m.getState (); } public datastate getState () {return state; } public void setState (status datastate) {this.state = state; }} /** Originator digunakan untuk memuat data, membuat objek memento, dan mengembalikan data asli melalui kenang -kenangan*/ tes kelas publik {public static void main (string [] args) {// originator originator = originator baru (); // originator.setNumber (8); // // memento memento = originator.getMementO (); // System.out.println (mememento.getNumber ()); State datastate = datastate baru (); state.setAction ("Salin karakter"); Originator originator = originator baru (); System.out.println ("Buat Data Asli"); originator.setState (state); System.out.println ("Buat objek Memorandum, simpan status data asli"); Memento Memento = originator.getMemento (); System.out.println ("Buat data baru"); originator.setState (datastate baru ()); System.out.println ("Setelah membuat data baru:" + originator.getState (). GetAction ()); /** Memento perlu disimpan di tempat tertentu dan diambil ketika diperlukan untuk mengembalikan data yang disimpan di dalamnya*/ System.out.println ("Kembalikan data asli setelah membuat data baru"); originator.setMemento (Memento); System.out.println (originator.getState (). GetAction ()); }}Mencetak:
Buat objek memorandum pembuatan data asli, simpan status data asli Buat data baru setelah membuat data baru: nol setelah membuat data baru, kembalikan data asli Salin Karakter