ปรัชญาที่อยู่เบื้องหลังรูปแบบของที่ระลึก


9

ฉันได้อ่านเกี่ยวกับรูปแบบของที่ระลึกจากแหล่งต่าง ๆ ของอินเทอร์เน็ต ข้อมูลที่แตกต่างจากแหล่งที่แตกต่างกันทำให้ฉันสับสนว่าทำไมรูปแบบนี้ถึงต้องการ

dofactoryการดำเนินงานกล่าวว่าความตั้งใจหลักของรูปแบบนี้คือการเรียกคืนสถานะของระบบ

Wikiกล่าวว่าจุดประสงค์หลักคือเพื่อให้สามารถเรียกคืนการเปลี่ยนแปลงในระบบได้ สิ่งนี้ให้ผลกระทบที่แตกต่าง - บอกว่าเป็นไปได้ที่ระบบจะมีการดำเนินการของที่ระลึกโดยไม่จำเป็นต้องกู้คืน และความสามารถในการกู้คืนนั้นเป็นคุณสมบัติของสิ่งนี้

OODesignกล่าวว่า

บางครั้งจำเป็นต้องจับภาพสถานะภายในของวัตถุในบางจุดและมีความสามารถในการคืนค่าวัตถุไปยังสถานะนั้นในเวลาต่อมา กรณีดังกล่าวมีประโยชน์ในกรณีที่เกิดข้อผิดพลาดหรือล้มเหลว

ดังนั้นคำถามของฉันคือทำไมเราใช้อันนี้อย่างแน่นอน มันคือการบันทึกสถานะก่อนหน้า - หรือเพื่อส่งเสริมการห่อหุ้มระหว่างผู้ดูแลและของที่ระลึก? ทำไมการห่อหุ้มแบบนี้จึงสำคัญมาก?

แก้ไข: สำหรับผู้เยี่ยมชมตรวจสอบการใช้งานนี้ !

แก้ไข : ฉันกำลังทำงานในการนำโซลูชันที่ระลึกไปใช้กับปัญหาของฉัน ฉันจะโพสต์คำถามอื่นเกี่ยวกับเรื่องนั้นและเชื่อมโยงคำถามนั้นกับคำถามนี้ ขอบคุณทุกคนที่ตอบข้อเสนอแนะที่มีค่า!

แก้ไข 3 : นี่คือลิงค์ไปสู่การใช้งานตัวอย่างของฉัน

คำตอบ:


2

รูปแบบที่คล้ายกัน, บันทึกหรือบันทึก, เก็บสถานะเช่นกัน แต่มักจะใช้เป็นการเพิ่มประสิทธิภาพความเร็วโปรแกรม หากการดำเนินการที่ใช้เวลานานมีจำนวนอินพุตและเอาต์พุตทั่วไปที่ จำกัด จำนวนที่สามารถพบได้บ่อยที่สุด (หรือทั้งหมด) สามารถเก็บไว้ใน hashtable เมื่อเรียกอีกครั้งด้วยอินพุตเดียวกันก่อนอื่นมันจะตรวจสอบ hashtable และหากพบพวกมันมันจะส่งกลับผลลัพธ์ก่อนหน้าโดยไม่ต้องคำนวณใหม่

ฉันคิดว่ารูปแบบของที่ระลึกสามารถใช้เพื่อประสิทธิภาพได้เช่นกัน - แทนที่จะทำการคำนวณย้อนกลับทั้งหมดสำหรับการเปลี่ยนสถานะย้อนกลับเพียงแค่เรียกคืนจากสถานะก่อนหน้า ฟังก์ชั่นบางอย่างเป็นแบบทางเดียวจึงไม่มีการเลิกทำเว้นแต่คุณจะเก็บสถานะก่อนหน้า

คุณสามารถใช้รูปแบบของที่ระลึกเพื่อบันทึกฟังก์ชันเป็นระยะหรือสมมาตรเช่นไซน์ คำนวณค่าทั้งหมดตั้งแต่ 0-180 องศาจากนั้นย้อนกลับไปหาค่าลบจาก 180-360 ยังดีกว่าคำนวณค่าจาก 0-90 จากนั้นย้อนกลับผ่านค่าเหล่านั้นเพื่อรับ 90-180 ส่งต่อสำหรับ 180-270 และย้อนกลับจาก 270-360

Ctrl-Z ใน Word หรือฟังก์ชั่นการเลิกทำของซอฟต์แวร์ใด ๆ อาจนำมาใช้โดยใช้รูปแบบของที่ระลึกหรือในบางกรณีอาจเป็นไปได้โดยการย้อนกลับของฟังก์ชั่นที่ทำการเปลี่ยนแปลงแต่ละครั้ง ในกรณีที่สองประวัติความเป็นมาของฟังก์ชั่นที่เรียกว่าเป็นของที่ระลึกดังนั้นฉันคิดว่ารูปแบบของที่ระลึกมักจะใช้สำหรับการเลิกทำ


รูปแบบการท่องจำใช้เพื่อหลีกเลี่ยงการคำนวณย้อนกลับและสำหรับฟังก์ชันตามระยะเวลา - ขอบคุณสำหรับข้อมูลนี้! ไม่มีอะไรที่เหมือนกับตัวอย่างที่ใช้งานได้จริงเพื่อให้ได้แนวคิดในการซึมเข้ามา
TheSilverBullet

นอกจากนี้ยังสามารถใช้กับบางสิ่งเช่นวิธีของนิวตันในการประมาณสแควร์รูทเพื่อตัดสินใจเมื่อคุณทำเสร็จ mitpress.mit.edu/sicp/full-text/book/… เนื่องจากการแสดงจุดลอยตัวพื้นฐานนั้นมีความแม่นยำ จำกัด ตัวเลขทั้งหมดจึงจะมีการประมาณซ้ำ หากคุณรู้ว่าการประมาณแบบเก่าคืออะไรคุณสามารถหยุดการประมาณในครั้งแรกที่คุณตอบซ้ำและได้รับความแม่นยำสูงสุด (โดยเสียเวลาและหน่วยความจำ)
GlenPeterson

8

รูปแบบของที่ระลึกนั้นใช้เพื่อจับภาพและบันทึกสถานะเท่านั้น การห่อหุ้มมีอยู่เพียงเพื่อปกป้องรัฐจากส่วนที่เหลือของระบบ - เมื่อรัฐถูกจับมันจะต้องมีการควบคุมอย่างระมัดระวัง ตัวอย่างเช่นมันไม่สมเหตุสมผลที่จะสามารถเปลี่ยนสถานะก่อนหน้านี้เมื่อได้รับการบันทึก (ซึ่งจะเปลี่ยนประวัติศาสตร์) และอาจไม่เหมาะสมที่จะกลับไปสู่สถานะก่อนหน้าของวัตถุหนึ่งโดยไม่กระทบต่อวัตถุอื่น (เพื่อป้องกัน ระบบเข้าสู่สถานะที่ไม่ถูกต้องทั้งหมด)

การใช้ Memento ที่ฉันพบเห็นบ่อยที่สุดคือการสนับสนุนการเลิกทำ นอกจากนี้ยังเกี่ยวข้องกับการจัดเก็บฟังก์ชันการทำซ้ำโดยเลื่อนไปข้างหน้าย้อนเวลา


ฉันยังใช้มันในตรรกะการคัดลอกและตรรกะการทำให้เป็นอันดับ (เพื่อส่งวัตถุผ่านสายหรือบันทึกสถานะเป็นไฟล์)
Scott Whitlock

@ScottWhitlock การบันทึกสถานะเป็นไฟล์เหมาะสมสำหรับ Memento วัตถุของที่ระลึกจะมีความสามารถในการเขียนตัวเองในรูปแบบที่กำหนดและสร้างขึ้นใหม่โดยการอ่านรูปแบบนี้ในขณะที่ผู้ดูแลจะให้อินเทอร์เฟซเพื่อบันทึกสถานะเป็นรูปแบบภายนอกหรือโหลดสถานะจากรูปแบบภายนอก - เป็นเพียงส่วนขยาย เพื่อบันทึกสถานะในหน่วยความจำ ฉันไม่เห็นว่ามันใช้ในตรรกะการคัดลอกจริงๆ ฉันต้องคิดให้มากขึ้น
โธมัสโอเวนส์


@ThomasOwens ขอบคุณสำหรับส่วนสำคัญในคำอธิบายของคุณที่ระลึกนั้นเป็นพื้นเพื่อ "บันทึก" รัฐ มันขึ้นอยู่กับดุลยพินิจของผู้ใช้ในการกู้คืนหรือไม่! ฉันพบส่วนนี้ของคำอธิบายที่หายไปจากการอ้างอิงทั้งหมดของฉัน !!
TheSilverBullet

@ScottWhitlock ขอบคุณมากสำหรับลิงก์สำหรับการดำเนินการของที่ระลึก! ฉันสามารถเข้าใจได้ไม่เพียง แต่การใช้งานขั้นพื้นฐานเท่านั้น แต่ยังใช้งานได้ง่ายเหมือนที่คุณทำ!
TheSilverBullet

1

คำจำกัดความทั้งหมดเหล่านี้นำคุณไปในทิศทางเดียวกัน พวกเขากำลังบอกว่าประเด็นคือการสามารถคืนค่าบางสิ่งกลับสู่สถานะก่อนหน้า สิ่งนั้นอาจเป็นทั้งระบบหรือเป็นวัตถุเดียว

รูปแบบนี้มีประโยชน์หากบันทึกมีการเปลี่ยนแปลงสถานะเมื่อเวลาผ่านไป แต่คุณมีความต้องการทางธุรกิจเพื่อให้สามารถเรียกคืนเป็นสถานะก่อนหน้านี้ได้ตลอดเวลา หรืออีกทางเลือกหนึ่งถ้าคุณต้องการดูบันทึกเช่นเดียวกับในช่วงเวลาก่อนหน้า ข้อกำหนดประเภทนี้พบได้ทั่วไปในระบบหลายประเภท

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.