1. คำจำกัดความ
โดยไม่ทำลายการห่อหุ้มจับสถานะภายในของวัตถุและบันทึกสถานะนี้ออกไปนอกวัตถุ ด้วยวิธีนี้วัตถุสามารถกู้คืนไปยังสถานะเดิมที่บันทึกไว้ในภายหลัง
2. เหตุผลในการใช้งาน
ต้องการกู้คืนสถานะดั้งเดิมของวัตถุในบางจุด
3. ตัวอย่างของสถานการณ์ที่เกี่ยวข้อง
มีแอพพลิเคชั่นมากมายของโหมดบันทึก แต่เราได้เห็นมัน แต่เราไม่ได้คิดอย่างรอบคอบ นี่เป็นเพียงการใช้โหมดบันทึก ให้ฉันยกตัวอย่างให้คุณ:
EG1. การใช้บันทึกช่วยจำใน JSP+Javabean:
เมื่อเพิ่มบัญชีในระบบคุณต้องกรอกชื่อผู้ใช้รหัสผ่านหมายเลขติดต่อที่อยู่และข้อมูลอื่น ๆ ในแบบฟอร์ม หากบางฟิลด์ไม่ได้กรอกหรือกรอกข้อมูลไม่ถูกต้องเมื่อผู้ใช้คลิกปุ่ม "ส่ง" คุณจะต้องบันทึกตัวเลือกที่ผู้ใช้ที่ป้อนในหน้าใหม่และแจ้งตัวเลือกที่ไม่ถูกต้อง สิ่งนี้สามารถทำได้โดยใช้คุณสมบัติ = "คำขอ" หรือ scope = "เซสชัน" ของ Javabean นั่นคือสามารถทำได้โดยใช้โหมดบันทึก
EG2. เมื่อซ่อมเบรกของรถ ก่อนอื่นถอดแผ่นกั้นทั้งสองด้านเพื่อเปิดเผยผ้าเบรกซ้ายและขวา สามารถลบชิ้นเดียวได้และอีกชิ้นหนึ่งทำหน้าที่เป็นบันทึกเพื่อระบุว่าเบรกติดตั้งอย่างไร หลังจากการซ่อมแซมชิ้นส่วนนี้เสร็จสิ้นอีกชิ้นหนึ่งจะถูกลบออก เมื่อชิ้นส่วนที่สองถูกลบออกชิ้นแรกจะกลายเป็นบันทึก
EG3. ว่ากันว่าไม่มียาเสียใจที่จะซื้อในชีวิต เราทุกคนจ่ายราคาสำหรับสิ่งที่เราทำ แต่ในโลกที่อ่อนนุ่มมี "ยาเสียใจ" หลังจากที่ฉันเปลี่ยนบางสิ่งบางอย่างของบางสิ่งตราบใดที่เราบันทึกสถานะบางอย่างมาก่อนเราสามารถกู้คืนสถานะของสิ่งที่ผ่านโหมดบันทึก ในความเป็นจริงนี่เป็น "กล่องสมบัติแสงจันทร์" ที่สามารถย้อนเวลากลับไปและคำว่า "เวทมนตร์" นั้นน่าทึ่งมาก
4. โครงสร้างไดอะแกรมและคำอธิบาย
(1) แผนภาพคลาสมีดังนี้:
(2) คำอธิบายชั้นเรียน (i) Memento: Memorandum บทบาทงานหลักมีดังนี้:
เก็บสถานะภายในของวัตถุผู้ริเริ่ม
มันสามารถปกป้องเนื้อหาจากการอ่านโดยวัตถุใด ๆ นอกเหนือจากวัตถุผู้ริเริ่ม
(ii) ผู้ริเริ่ม: บทบาทของสปอนเซอร์ส่วนใหญ่ทำภารกิจต่อไปนี้:
สร้างวัตถุบันทึกด้วยสถานะภายในปัจจุบัน
ใช้วัตถุบันทึกเพื่อจัดเก็บสถานะภายใน
(iii) ผู้ดูแล: บุคคลที่รับผิดชอบงานจะเสร็จสมบูรณ์ดังนี้:
รับผิดชอบในการรักษาวัตถุบันทึกข้อตกลง;
เนื้อหาของวัตถุบันทึกจะไม่ถูกบันทึกไว้
5. ตัวอย่าง
/ *** data object*/ คลาสสาธารณะ datastate {การกระทำสตริงส่วนตัว; โมฆะสาธารณะ setAction (การกระทำของสตริง) {this.action = การกระทำ; } public String getAction () {return action; - /*** วัตถุที่บันทึกสำเนาของสถานะภายในของวัตถุอื่น ด้วยวิธีนี้วัตถุสามารถกู้คืนไปยังสถานะเดิมที่บันทึกไว้ในอนาคต */ นำเข้า java.io.file; นำเข้า java.io.serializable; Public Class Memento ใช้ Serializable { /*หมายเลข int ส่วนตัว; ไฟล์ไฟล์ส่วนตัว = null; ของที่ระลึกสาธารณะ (ผู้ริเริ่ม o) {this.number = o.getNumber (); this.file = o.getFile (); } public int getNumber () {return this.number; } โมฆะสาธารณะ setNumber (หมายเลข int) {this.number = number; } ไฟล์สาธารณะ getFile () {return this.file; } โมฆะสาธารณะ setFile (ไฟล์ไฟล์) {this.file = ไฟล์; } */ สถานะข้อมูลส่วนตัว; Public Memento (ผู้ริเริ่ม o) {this.state = o.getState (); } Datastate สาธารณะ getState () {return state; } โมฆะสาธารณะ setState (สถานะข้อมูล) {this.state = state; - ผู้ริเริ่มคลาสสาธารณะ { /* หมายเลข int ส่วนตัว; ไฟล์ไฟล์ส่วนตัว = null; ผู้ริเริ่มสาธารณะ () {} // สร้างของที่ระลึกและส่งผ่านไปยังที่ระลึกสาธารณะเป็นพารามิเตอร์ของที่ระลึกสาธารณะ GetMemento () {กลับมาใหม่ของ Memento (นี่); } // นำข้อมูลที่บันทึกไว้จาก Memento และกู้คืนไปยังโมฆะสถานะสาธารณะของรัฐดั้งเดิม (Memento M) {number = m.getNumber (); ไฟล์ = m.getFile (); } public int getNumber () {หมายเลขส่งคืน; } โมฆะสาธารณะ setNumber (หมายเลข int) {this.number = number; } ไฟล์สาธารณะ getFile () {return file; } โมฆะสาธารณะ setFile (ไฟล์ไฟล์) {this.file = ไฟล์; }*/ สถานะข้อมูลส่วนตัว; ผู้ริเริ่มสาธารณะ () {} ผู้สร้างสาธารณะ (สถานะข้อมูล) {this.state = state; } // สร้างของที่ระลึกและส่งผ่านไปยังที่ระลึกสาธารณะเป็นพารามิเตอร์ของที่ระลึกสาธารณะ getMemento () {กลับมาของที่ระลึกใหม่ (นี่); } // นำข้อมูลที่บันทึกไว้จาก Memento และกู้คืนไปยัง Void Public Public Void Setmemento (Memento M) { / * * วัตถุที่สร้างโดย GetMemento () จะถูกบันทึกไว้ในคอนเทนเนอร์ * เมื่อจำเป็นต้องได้รับการกู้คืนให้ส่งผ่านไปยังวิธีการปัจจุบันจากนั้นใช้ getState () เพื่อรับ */ this.state = M.GetState (); } Datastate สาธารณะ getState () {return state; } โมฆะสาธารณะ setState (สถานะข้อมูล) {this.state = state; - /** ผู้ริเริ่มใช้ในการโหลดข้อมูลสร้างวัตถุของที่ระลึกและกู้คืนข้อมูลต้นฉบับผ่าน Memento*/ Public Class Test {โมฆะสาธารณะคงที่หลัก (String [] args) {// ตัวสร้างผู้สร้าง = ใหม่ผู้สร้างใหม่ (); // ผู้สร้าง SetNumber (8); // // Memento Memento = ผู้สร้าง. getMemento (); // system.out.println (memento.getNumber ()); DataState state = datastate ใหม่ (); state.setAction ("คัดลอกอักขระ"); ผู้ริเริ่มผู้ริเริ่ม = ผู้ริเริ่มใหม่ (); System.out.println ("สร้างข้อมูลต้นฉบับ"); ผู้ริเริ่ม. SetState (สถานะ); System.out.println ("สร้างวัตถุบันทึกบันทึกบันทึกสถานะข้อมูลดั้งเดิม"); Memento Memento = ผู้สร้าง. getMemento (); System.out.println ("สร้างข้อมูลใหม่"); Originatator.setState (Datastate ใหม่ ()); System.out.println ("หลังจากสร้างข้อมูลใหม่:" + ornector.getState (). getAction ()); /** ของที่ระลึกต้องได้รับการบันทึกในสถานที่หนึ่งและเรียกคืนเมื่อจำเป็นต้องกู้คืนข้อมูลที่บันทึกไว้ข้างใน*/ system.out.println ("กู้คืนข้อมูลต้นฉบับหลังจากสร้างข้อมูลใหม่"); ผู้เริ่มต้น SetMemento (Memento); System.out.println (ผู้ริเริ่ม. getState (). getAction ()); -พิมพ์:
สร้างวัตถุบันทึกข้อมูลการสร้างข้อมูลดั้งเดิมบันทึกสถานะข้อมูลดั้งเดิมสร้างข้อมูลใหม่หลังจากสร้างข้อมูลใหม่: NULL หลังจากสร้างข้อมูลใหม่คืนข้อมูลต้นฉบับคัดลอกอักขระดั้งเดิม