บทความนี้อธิบายถึงการใช้โหมดบันทึกเพื่อใช้ฟังก์ชั่นเกมผ่านระดับของ Java แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
1. คำจำกัดความรูปแบบ
โหมดบันทึกบันทึกสถานะภายในของวัตถุโดยไม่ทำลายสิ่งที่แนบมาและบันทึกสถานะนี้ออกไปนอกวัตถุ ด้วยวิธีนี้วัตถุสามารถกู้คืนไปยังสถานะเดิมที่บันทึกไว้ในภายหลัง
2. ตัวอย่างของแบบจำลอง
การวิเคราะห์โหมด 1
เรายืมเกมระดับผ่านเพื่อแสดงโหมดนี้
2 MEMO MODE DIAGRAM คลาสสแตติกคลาส
3 ตัวอย่างโค้ด (โหมด Memo กล่องดำ)
3.1 สร้าง memo memo carrated interrowmemento
แพ็คเกจ com.demo.memento;/** * Memorandum Interface แคบ ๆ (ไม่มีวิธีการจัดเตรียมวัตถุภายนอกไม่สามารถเข้าถึงข้อมูลภายในของวัตถุบันทึกข้อตกลง) * * @author * */อินเทอร์เฟซสาธารณะ inarrowmemento {}3.2 ฮีโร่ผู้สนับสนุน
แพ็คเกจ com.demo.originator; นำเข้า java.util.random; นำเข้า com.demo.memento.inarrowmemento;/** * Challenger * * @author * */ฮีโร่ชั้นเรียนสาธารณะ {// ค่าเลือด // ค่าแรงดาบ int ส่วนตัว; // หมายเลขสุ่มส่วนตัวสุ่มสุดท้ายสุ่ม = ใหม่สุ่ม (); // สร้างวิธีการเริ่มต้นเนื้อหาฮีโร่สาธารณะ () {this.blood = 100; this.word = 100; } // สร้างบันทึกข้อตกลงเพื่อบันทึกเนื้อหาสาธารณะ inarrowmemento createMemento () {system.out.println ("สร้างบันทึกข้อตกลง ... "); กลับมาใหม่ของ Memento (this.blood, this.word); } // การกู้คืนบันทึกเนื้อหาโมฆะสาธารณะ RestoreFrommemento (Inarrowmemento Memento) {System.out.println ("คืนสถานะในบันทึกข้อตกลง ... "); if (memento! = null) {memento memento2 = (memento) Memento; this.blood = memento2.getBlood (); this.word = memento2.getsword (); }} / ** * Challenge Boss * / public int koboss () {// เมื่อค่าเลือดคือ <= 0 ความท้าทายล้มเหลว สมมติว่าความน่าจะเป็นของการเอาชนะบอสคือ 2% // เมื่อตัดสินยังคงมีค่าเลือดถ้า (this.blood <= 0 || this.word <= 0) {system.out.println (this.toString ()); System.out.println ("เปลี่ยนเจ้านายล้มเหลว!"); กลับ -1; } else {// รับหมายเลขสุ่ม double win = math.random (); if (win <= 0.02) {system.out.println (this.toString ()); System.out.println ("ขอแสดงความยินดีท้าทายเจ้านายให้สำเร็จ!"); กลับ 1; } else {system.out.println (this.toString ()); System.out.println ("ยังคงโจมตีเจ้านาย ... "); // หมายเลขสุ่มช่วยลดค่าเลือดและค่าแรงเพื่อดำเนินการต่อ ko int blood_sub = random.nextint (10); int sword_sub = random.nextint (10); this.blood -= blood_sub; this.word -= sword_sub; กลับ 0; }}} @Override Public String toString () {return "ค่าเลือดปัจจุบัน:" + this.blood + " - ค่าแรงปัจจุบัน:" + this.word; } / ** * Memorandum (ทั้งคลาสเป็นส่วนตัวและสามารถเข้าถึงได้โดยผู้ริเริ่มเท่านั้น) * * @author * * / Private Class Memento ใช้งาน Inarrowmemento {// ค่าเลือดส่วนตัว // ค่าแรงดาบ int สุดท้ายส่วนตัว; // constructor การเริ่มต้นเนื้อหาของ Memento ส่วนตัว (int Blood, Int Sword) {this.blood = เลือด; this.word = ดาบ; } ส่วนตัว int getblood () {return blood; } int ส่วนตัว getSword () {ส่งคืนดาบ; -3.3 Memorandum Manager - ผู้ดูแล
แพ็คเกจ com.demo.caretaker; นำเข้า com.demo.memento.inarrowmemento;/** * ผู้ดูแลระบบ * * @author * */ผู้ดูแลชั้นเรียนสาธารณะ {ส่วนตัว Inarrowmemento Memento; / ** * รับบันทึกข้อตกลง * * @return */ สาธารณะ inarrowmemento getMemento () {return memento; } / ** * บันทึกวัตถุบันทึกข้อตกลง * * @param memento * / โมฆะสาธารณะ setmemento (inarrowmemento memento) {this.memento = memento; -3.4 ให้ฮีโร่ท้าทายเจ้านายหนึ่งลูกค้า
แพ็คเกจ com.demo; นำเข้า com.demo.caretaker.caretaker; นำเข้า com.demo.originator.hero;/** * แอปพลิเคชันหลักของไคลเอนต์ * * @author * */ไคลเอนต์คลาสสาธารณะ {/** * @param args */public static void main // สร้างผู้ดูแลผู้ดูแลระบบผู้ดูแล = ผู้ดูแลใหม่ (); // บันทึกข้อมูลสถานะก่อนที่ผู้ดูแลการท้าทาย SetMemento (hero.createMemento ()); // มีเพียงสามโอกาสที่จะเอาชนะ Boss int cnt = 1; // Challenge Boss ผลลัพธ์ int ko = -1; ในขณะที่ (ko! = 1 && cnt <= 3) {system.out .println ("======================" + CNT + "การท้าทาย - - {ถ้า ko == -1) {// ความท้าทายล้มเหลวและคืนค่าให้กับสถานะการท้าทายครั้งแรก -4 ผลการทำงาน
สร้างบันทึก ...
-
ค่าเลือดปัจจุบัน: 100 - ค่าแรงปัจจุบัน: 100
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 96 - ค่าแรงปัจจุบัน: 99
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 90 - ค่าแรงปัจจุบัน: 98
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 81 - ค่าแรงปัจจุบัน: 95
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 78 - ค่าแรงปัจจุบัน: 93
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 72 - ค่าแรงปัจจุบัน: 88
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 64 - ค่าแรงปัจจุบัน: 85
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 56 - ค่าแรงปัจจุบัน: 80
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 49 - ค่าแรงปัจจุบัน: 73
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 45 - ค่าแรงปัจจุบัน: 71
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 37 - ค่าแรงปัจจุบัน: 68
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 29 - ค่าแรงปัจจุบัน: 65
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 20 - ค่าแรงปัจจุบัน: 59
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 11 - ค่าแรงปัจจุบัน: 54
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 9 - ค่าแรงปัจจุบัน: 52
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 3 - ค่าแรงปัจจุบัน: 45
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: -3 - ค่าแรงปัจจุบัน: 41
ล้มเหลวในการท้าทายเจ้านาย!
คืนสถานะในบันทึก ...
======================= 2nd Challenge =================
ค่าเลือดปัจจุบัน: 100 - ค่าแรงปัจจุบัน: 100
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 96 - ค่าแรงปัจจุบัน: 95
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 96 - ค่าแรงปัจจุบัน: 91
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 88 - ค่าแรงปัจจุบัน: 82
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 79 - ค่าแรงปัจจุบัน: 79
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 76 - ค่าแรงปัจจุบัน: 72
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 73 - ค่าแรงปัจจุบัน: 70
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 72 - ค่าแรงปัจจุบัน: 66
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 72 - ค่าแรงปัจจุบัน: 61
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 72 - ค่าแรงปัจจุบัน: 58
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 72 - ค่าแรงปัจจุบัน: 52
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 63 - ค่าแรงปัจจุบัน: 51
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 62 - ค่าแรงปัจจุบัน: 50
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 54 - ค่าแรงปัจจุบัน: 41
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 50 - ค่าแรงปัจจุบัน: 39
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 47 - ค่าแรงปัจจุบัน: 39
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 43 - ค่าแรงปัจจุบัน: 38
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 37 - ค่าแรงปัจจุบัน: 36
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 34 - ค่าแรงปัจจุบัน: 35
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 32 - ค่าแรงปัจจุบัน: 27
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 28 - ค่าแรงปัจจุบัน: 22
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 26 - ค่าแรงปัจจุบัน: 15
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 24 - ค่าแรงปัจจุบัน: 11
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 19 - ค่าแรงปัจจุบัน: 3
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 10 - ค่าแรงปัจจุบัน: -3
ล้มเหลวในการท้าทายเจ้านาย!
คืนสถานะในบันทึก ...
===================== ความท้าทายครั้งที่สาม ====================
ค่าเลือดปัจจุบัน: 100 - ค่าแรงปัจจุบัน: 100
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 99 - ค่าแรงปัจจุบัน: 93
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 98 - ค่าแรงปัจจุบัน: 84
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 98 - ค่าแรงปัจจุบัน: 82
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 95 - ค่าแรงปัจจุบัน: 76
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 88 - ค่าแรงปัจจุบัน: 68
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 81 - ค่าแรงปัจจุบัน: 64
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 76 - ค่าแรงปัจจุบัน: 64
โจมตีเจ้านายต่อไป ...
ค่าเลือดปัจจุบัน: 67 - ค่าแรงปัจจุบัน: 64
ขอแสดงความยินดีคุณประสบความสำเร็จในการท้าทายเจ้านาย!
iii. หลักการออกแบบของรูปแบบนี้
1. การบำรุงรักษาขอบเขตของแพ็คเกจ
2 การใช้งานอินเทอร์เฟซคู่เพื่อความปลอดภัย
4. ใช้โอกาส
1 เมื่อจำเป็นต้องกู้คืนสถานะก่อนหน้าของวัตถุในช่วงเวลาหนึ่ง
2. ในโหมด Memo กล่องสีขาวคุณต้องบันทึกสถานะของวัตถุในช่วงเวลาหนึ่งจากภายนอก แต่ถ้าคุณใช้อินเทอร์เฟซเพื่อให้วัตถุอื่นรับสถานะเหล่านี้โดยตรงมันจะเปิดเผยรายละเอียดการใช้งานของวัตถุและทำลายการห่อหุ้มวัตถุ
3 การใช้โหมด Memo Box Memo ให้กลไกการเข้าถึงอินเตอร์เฟสคู่ซึ่งให้อินเทอร์เฟซที่กว้างไปยังวัตถุริเริ่มและอินเทอร์เฟซแคบไปยังวัตถุอื่นนอกเหนือจากผู้ริเริ่มจึงสามารถแก้ปัญหาการห่อหุ้มและความปลอดภัยได้อย่างมีประสิทธิภาพ
V. ไดอะแกรมคลาสคงที่
แผนไดอะแกรมคลาสสีขาว 1 กล่องไดอะแกรมแบบคงที่
ไดอะแกรมคลาส Black Box Memo 2
สำหรับเนื้อหาที่เกี่ยวข้องกับ Java เพิ่มเติมผู้อ่านที่สนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "โครงสร้างข้อมูล Java และการสอนอัลกอริทึม", "บทสรุปของเคล็ดลับการดำเนินการ Java Dom Node", "บทสรุปของไฟล์ Java และเคล็ดลับการดำเนินการไดเรกทอรี" และ "สรุป
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน