Latest web development tutorials
×

设计模式 หลักสูตร

รูปแบบการออกแบบ รู้เบื้องต้นเกี่ยวกับรูปแบบการออกแบบ โหมดโรงงาน แบบโรงงานย่อ รูปแบบเดี่ยว รุ่นสร้าง รุ่นต้นแบบ อะแดปเตอร์รุ่น สะพานโหมด รูปแบบตัวกรอง โหมดการทำงานร่วมกัน มัณฑนากร รูปแบบซุ้ม ฟลายเวท โหมดพร็อกซี่ ห่วงโซ่ของรูปแบบความรับผิดชอบ โหมดคำสั่ง รูปแบบล่าม โหมดซ้ำแล้วซ้ำอีก รูปแบบที่เป็นสื่อกลาง รูปแบบของที่ระลึก รูปแบบการสังเกตการณ์ รูปแบบของรัฐ null Object Model โหมดกลยุทธ์ โหมดแม่แบบ รูปแบบของผู้เข้าชม MVC โหมด โหมดตัวแทน โหมดนิติบุคคลองค์ประกอบ รูปแบบการเข้าถึงข้อมูลของวัตถุ รูปแบบการควบคุมด้านหน้า intercepting รูปแบบตัวกรอง รูปแบบการบริการผู้แทนจำหน่าย วัตถุ Transfer รุ่น

设计模式其他

ทรัพยากรโหมดออกแบบ

รูปแบบของที่ระลึก

โหมดการบันทึก (แบบ Memento) เพื่อบันทึกสถานะของวัตถุเพื่อเรียกคืนวัตถุในเวลาที่เหมาะสม รูปแบบการบันทึกข้อตกลงเป็นรูปแบบพฤติกรรม

การแนะนำ

เจตนา: โดยไม่ละเมิด encapsulation จับรัฐภายในของวัตถุและบันทึกสถานะที่อยู่ด้านนอกของวัตถุ

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

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

วิธีการแก้ไข: บันทึกโดยชั้นที่ออกแบบมาเพื่อเก็บสถานะของวัตถุ

รหัสสำคัญ: ลูกค้าไม่ได้คู่กับชั้นบันทึกควบคู่กับการจัดการเรียนการบันทึก

ตัวอย่างการใช้งาน: 1, เสียใจในภายหลัง2 เมื่อเล่นเกมที่เก็บ 3 CTRI ของ Windows เลน + Z 4, IE ในด้านหลัง 4, การจัดการฐานข้อมูลการทำธุรกรรม

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

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

สถานการณ์การใช้งาน: 1, จำเป็นที่จะต้องบันทึก / เรียกคืนรัฐที่เกี่ยวข้องของข้อมูลที่เกิดเหตุ2 มีการดำเนินงานที่มีให้ย้อนกลับ

หมายเหตุ: 1, เพื่อตอบสนองหลักการของ Demeter, นอกจากนี้ยังเพิ่มการบันทึกการจัดการชั้นเรียน2 เพื่อที่จะบันทึกความทรงจำคุณสามารถใช้แบบจำลองต้นแบบโหมด + บันทึก

การสำนึก

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

MementoPatternDemo เรียนสาธิตของเราโดยใช้ผู้ดูแลและผู้เริ่มต้นวัตถุเพื่อแสดงสถานะของการกู้คืนวัตถุ

รูปแบบการบันทึกข้อตกลงแผนภาพ UML

ขั้นตอนที่ 1

สร้างคลาสที่ระลึก

Memento.java

คลาสที่สาธารณะที่ระลึก {
   รัฐ String เอกชน

   Memento สาธารณะ (รัฐ String) {
      this.state = รัฐ
   }

   String สาธารณะ getState () {
      กลับรัฐ
   }	
}

ขั้นตอนที่ 2

สร้างชั้นต้น

Originator.java

เริ่มต้นเรียนสาธารณะ {
   รัฐ String เอกชน

   โมฆะสาธารณะ setState (รัฐ String) {
      this.state = รัฐ
   }

   String สาธารณะ getState () {
      กลับรัฐ
   }

   ประชาชนที่ระลึก saveStateToMemento () {
      กลับมาที่ระลึกใหม่ (รัฐ);
   }

   โมฆะสาธารณะ getStateFromMemento (Memento Memento) {
      รัฐ = Memento.getState ();
   }
}

ขั้นตอนที่ 3

สร้างชั้นดูแล

CareTaker.java

นำเข้า java.util.ArrayList;
นำเข้า java.util.List;

ผู้ดูแลระดับสาธารณะ {
   รายการส่วนตัว <ระลึก> mementoList ใหม่ = ArrayList <ระลึก> ();

   โมฆะสาธารณะเพิ่ม (รัฐ Memento) {
      mementoList.add (รัฐ);
   }

   ของที่ระลึกของประชาชนได้รับ (ดัชนี int) {
      กลับ mementoList.get (ดัชนี);
   }
}

ขั้นตอนที่ 4

ใช้ทำความสะอาดและเริ่มต้นวัตถุ

MementoPatternDemo.java

MementoPatternDemo คลาสที่สาธารณะ {
   ประชาชนเป็นโมฆะคง main (String args []) {
      เริ่มต้นริเริ่ม = เริ่มต้นใหม่ ();
      ดูแลทำความสะอาดดูแล = ใหม่ ();
      originator.setState ( "# รัฐที่ 1");
      originator.setState ( "รัฐ # 2");
      careTaker.add (originator.saveStateToMemento ());
      originator.setState ( "รัฐ # 3");
      careTaker.add (originator.saveStateToMemento ());
      originator.setState ( "รัฐ # 4");

      System.out.println ( "รัฐปัจจุบัน:" + originator.getState ());		
      originator.getStateFromMemento (careTaker.get (0));
      System.out.println ( "ครั้งแรกที่บันทึกไว้รัฐ:" + originator.getState ());
      originator.getStateFromMemento (careTaker.get (1));
      System.out.println ( "สองบันทึกรัฐ:" + originator.getState ());
   }
}

ขั้นตอนที่ 5

ตรวจสอบการส่งออก

สถานะปัจจุบัน: รัฐ # 4
สถานะที่บันทึกไว้ครั้งแรก: รัฐ # 2
สถานะที่บันทึกไว้ประการที่สอง: รัฐ # 3