Artikel ini menjelaskan penggunaan mode memo untuk mengimplementasikan fungsi permainan level-passing Java. Bagikan untuk referensi Anda, sebagai berikut:
1. Definisi Pola
Mode memo menangkap keadaan internal suatu objek tanpa menghancurkan selungkup dan menyimpan keadaan ini di luar objek. Dengan cara ini, objek dapat dikembalikan ke keadaan yang disimpan semula nanti.
2. Contoh model
1 analisis mode
Kami meminjam permainan level-through untuk menggambarkan mode ini.
2 Mode Memo Diagram Kelas Statis
3 Contoh Kode (Mode Memo Kotak Hitam)
3.1 Buat memo antarmuka sempit inarrowmemento
Paket com.demo.memento;/** * Memorandum Antarmuka sempit (tidak ada metode yang disediakan, objek eksternal tidak dapat mengakses informasi internal objek memorandum) * * @author * */antarmuka publik Inarrowmemento {}3.2 Pahlawan Sponsor Memorandum
Paket com.demo.originator; import java.util.random; import com.demo.memento.inarrowmemento;/** * challenger * * @author * */kelas publik pahlawan {// nilainya darah pribadi darah; // Force Value Private Int Sword; // nomor acak private final acak acak = acak baru (); // Metode Konstruksi Inisialisasi Konten Pahlawan publik () {this.blood = 100; this.sword = 100; } // Buat memorandum untuk menyimpan konten public inarrowmemento createMemento () {System.out.println ("Buat Memorandum ..."); kembalikan kenang -kenangan baru (this.blood, this.sword); } // Kembalikan konten memorandum public void restorefrommemento (inarrowmemento memento) {System.out.println ("Kembalikan status dalam memorandum ..."); if (memento! = null) {memento memento2 = (memento) memento; this.blood = memento2.getblood (); this.sword = memento2.getsword (); }} / ** * Tantangan bos * / public int koboss () {// Saat nilai darah <= 0, tantangan gagal. Asumsikan bahwa probabilitas mengalahkan bos adalah 2% // ketika menilai, masih ada nilai darah jika (this.blood <= 0 || this.sword <= 0) {System.out.println (this.toString ()); System.out.println ("Ubah bos gagal!"); kembali -1; } else {// dapatkan nomor acak ganda win = math.random (); if (win <= 0,02) {System.out.println (this.toString ()); System.out.println ("Selamat, menantang bos dengan sukses!"); kembali 1; } else {System.out.println (this.toString ()); System.out.println ("Terus serang bos ..."); // Nomor acak mengurangi nilai darah dan nilai kekuatan untuk melanjutkan ko int darah_sub = acak.nextint (10); int sword_sub = random.nextInt (10); this.blood -= Blood_sub; this.sword -= sword_sub; kembali 0; }}} @Override Public String ToString () {return "Nilai darah saat ini:" + this.blood + " - Nilai kekuatan saat ini:" + this.sword; } / ** * Memorandum (seluruh kelas bersifat pribadi dan hanya dapat diakses oleh inisiator) * * @author * * / kelas privat mememen dari inarrowmemento {// nilai darah private final int darah; // Nilai Force Sword Final Private; // konten inisialisasi konstruktor kenang -kenangan pribadi (int darah, int pedang) {this.blood = darah; this.sword = pedang; } private int getBlood () {return darah; } private int getsword () {return pedang; }}}3.3 Manajer Memorandum - Penjaga
Paket com.demo.caretaker; import com.demo.memento.inarrowmemento;/** * administrator * * @author * */penjaga kelas publik {private inarrowmemento memento; / ** * Dapatkan objek memorandum * * @return */ public inarrowmemento getMemento () {return memento; } / ** * Simpan objek memorandum * * @param memento * / public void setMemento (inarrowmemento memento) {this.memento = memento; }}3.4 Biarkan pahlawan menantang klien bos satu
Paket com.demo; import com.demo.caretaker.caretaker; import com.demo.originator.hero;/** * Aplikasi utama klien * * @author * */Klien kelas publik {/** * @param args */public static void main (string [] args) {// create hero hero = New Hero = public static void (string [] args) {// create hero hero = New Hero = public static static Main (string [] args) {//create hero hero = New Hero = public static void Main (string [] args) {//New Hero Hero = New Heroer = // Buat pengasuh administrator pengasuh = pengasuh baru (); // Simpan informasi status di hadapan tantangan pengasuh.setmemento (hero.createMemento ()); // Hanya ada tiga peluang untuk mengalahkan bos int cnt = 1; // Tantangan Hasil Bos Int Ko = -1; while (ko! = 1 && cnt <= 3) {System.out .println ("======================" + cnt + "tantangan =========================================================================================================== =========================================================================================================== {if (ko == -1) {// Tantangan gagal dan dipulihkan ke kumulatif status awal hero.restorefrommemento (caretaker.getmemento ()); }}4 hasil berjalan
Buat memo ...
========================================
Nilai Darah Saat Ini: 100 - Nilai Kekuatan Saat Ini: 100
Terus menyerang bos ...
Nilai Darah Saat Ini: 96 - Nilai Kekuatan Saat Ini: 99
Terus menyerang bos ...
Nilai Darah Saat Ini: 90 - Nilai Kekuatan Saat Ini: 98
Terus menyerang bos ...
Nilai Darah Saat Ini: 81 - Nilai Kekuatan Saat Ini: 95
Terus menyerang bos ...
Nilai Darah Saat Ini: 78 - Nilai Kekuatan Saat Ini: 93
Terus menyerang bos ...
Nilai Darah Saat Ini: 72 - Nilai Kekuatan Saat Ini: 88
Terus menyerang bos ...
Nilai Darah Saat Ini: 64 - Nilai Kekuatan Saat Ini: 85
Terus menyerang bos ...
Nilai Darah Saat Ini: 56 - Nilai Kekuatan Saat Ini: 80
Terus menyerang bos ...
Nilai Darah Saat Ini: 49 - Nilai Kekuatan Saat Ini: 73
Terus menyerang bos ...
Nilai Darah Saat Ini: 45 - Nilai Kekuatan Saat Ini: 71
Terus menyerang bos ...
Nilai Darah Saat Ini: 37 - Nilai Kekuatan Saat Ini: 68
Terus menyerang bos ...
Nilai Darah Saat Ini: 29 - Nilai Kekuatan Saat Ini: 65
Terus menyerang bos ...
Nilai Darah Saat Ini: 20 - Nilai Kekuatan Saat Ini: 59
Terus menyerang bos ...
Nilai Darah Saat Ini: 11 - Nilai Kekuatan Saat Ini: 54
Terus menyerang bos ...
Nilai Darah Saat Ini: 9 - Nilai Kekuatan Saat Ini: 52
Terus menyerang bos ...
Nilai Darah Saat Ini: 3 - Nilai Kekuatan Saat Ini: 45
Terus menyerang bos ...
Nilai darah saat ini: -3 - Nilai kekuatan saat ini: 41
Gagal menantang bos!
Kembalikan status dalam memo ...
====================== 2nd Challenge =================
Nilai Darah Saat Ini: 100 - Nilai Kekuatan Saat Ini: 100
Terus menyerang bos ...
Nilai Darah Saat Ini: 96 - Nilai Kekuatan Saat Ini: 95
Terus menyerang bos ...
Nilai Darah Saat Ini: 96 - Nilai Kekuatan Saat Ini: 91
Terus menyerang bos ...
Nilai Darah Saat Ini: 88 - Nilai Kekuatan Saat Ini: 82
Terus menyerang bos ...
Nilai Darah Saat Ini: 79 - Nilai Kekuatan Saat Ini: 79
Terus menyerang bos ...
Nilai Darah Saat Ini: 76 - Nilai Kekuatan Saat Ini: 72
Terus menyerang bos ...
Nilai Darah Saat Ini: 73 - Nilai Kekuatan Saat Ini: 70
Terus menyerang bos ...
Nilai Darah Saat Ini: 72 - Nilai Kekuatan Saat Ini: 66
Terus menyerang bos ...
Nilai Darah Saat Ini: 72 - Nilai Kekuatan Saat Ini: 61
Terus menyerang bos ...
Nilai Darah Saat Ini: 72 - Nilai Kekuatan Saat Ini: 58
Terus menyerang bos ...
Nilai Darah Saat Ini: 72 - Nilai Kekuatan Saat Ini: 52
Terus menyerang bos ...
Nilai Darah Saat Ini: 63 - Nilai Kekuatan Saat Ini: 51
Terus menyerang bos ...
Nilai Darah Saat Ini: 62 - Nilai Kekuatan Saat Ini: 50
Terus menyerang bos ...
Nilai Darah Saat Ini: 54 - Nilai Kekuatan Saat Ini: 41
Terus menyerang bos ...
Nilai Darah Saat Ini: 50 - Nilai Kekuatan Saat Ini: 39
Terus menyerang bos ...
Nilai Darah Saat Ini: 47 - Nilai Kekuatan Saat Ini: 39
Terus menyerang bos ...
Nilai Darah Saat Ini: 43 - Nilai Kekuatan Saat Ini: 38
Terus menyerang bos ...
Nilai Darah Saat Ini: 37 - Nilai Kekuatan Saat Ini: 36
Terus menyerang bos ...
Nilai Darah Saat Ini: 34 - Nilai Kekuatan Saat Ini: 35
Terus menyerang bos ...
Nilai Darah Saat Ini: 32 - Nilai Kekuatan Saat Ini: 27
Terus menyerang bos ...
Nilai Darah Saat Ini: 28 - Nilai Kekuatan Saat Ini: 22
Terus menyerang bos ...
Nilai Darah Saat Ini: 26 - Nilai Kekuatan Saat Ini: 15
Terus menyerang bos ...
Nilai Darah Saat Ini: 24 - Nilai Kekuatan Saat Ini: 11
Terus menyerang bos ...
Nilai Darah Saat Ini: 19 - Nilai Kekuatan Saat Ini: 3
Terus menyerang bos ...
Nilai Darah Saat Ini: 10 - Nilai Kekuatan Saat Ini: -3
Gagal menantang bos!
Kembalikan status dalam memo ...
==================== Tantangan ketiga ====================
Nilai Darah Saat Ini: 100 - Nilai Kekuatan Saat Ini: 100
Terus menyerang bos ...
Nilai Darah Saat Ini: 99 - Nilai Kekuatan Saat Ini: 93
Terus menyerang bos ...
Nilai Darah Saat Ini: 98 - Nilai Kekuatan Saat Ini: 84
Terus menyerang bos ...
Nilai Darah Saat Ini: 98 - Nilai Kekuatan Saat Ini: 82
Terus menyerang bos ...
Nilai Darah Saat Ini: 95 - Nilai Kekuatan Saat Ini: 76
Terus menyerang bos ...
Nilai Darah Saat Ini: 88 - Nilai Kekuatan Saat Ini: 68
Terus menyerang bos ...
Nilai Darah Saat Ini: 81 - Nilai Kekuatan Saat Ini: 64
Terus menyerang bos ...
Nilai Darah Saat Ini: 76 - Nilai Kekuatan Saat Ini: 64
Terus menyerang bos ...
Nilai Darah Saat Ini: 67 - Nilai Kekuatan Saat Ini: 64
Selamat, Anda telah berhasil menantang bos!
AKU AKU AKU. Prinsip -prinsip desain dari pola ini
1. Mempertahankan batas paket
2 implementasi antarmuka ganda untuk memastikan keamanan.
4. Gunakan kesempatan
1 Ketika perlu untuk mengembalikan keadaan objek sebelumnya pada saat tertentu.
2. Dalam mode memo kotak putih, Anda perlu menyimpan keadaan objek pada saat tertentu secara eksternal, tetapi jika Anda menggunakan antarmuka untuk memungkinkan objek lain untuk secara langsung mendapatkan status ini, itu akan mengekspos detail implementasi objek dan menghancurkan enkapsulasi objek.
3 Black Box Memo Mode Implementasi menyediakan mekanisme akses antarmuka ganda, memberikan antarmuka yang luas untuk objek inisiator, dan antarmuka sempit ke objek selain inisiator, sehingga secara efektif menyelesaikan enkapsulasi dan keamanan.
V. Diagram kelas statis
1 Mode memo kotak putih diagram kelas statis
2 Mode Memo Kotak Hitam Diagram Kelas Statis
Untuk konten yang lebih terkait dengan Java, pembaca yang tertarik dengan situs ini dapat melihat topik: "Tutorial Struktur Data Java dan Algoritma", "Ringkasan Java Operation Dom Node Tips", "Ringkasan Tips Operasi Java File dan Direktori" dan "Ringkasan Java Cache Tips"
Saya harap artikel ini akan membantu pemrograman Java semua orang.