2.1 รัฐ

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

สถานะ

รูปแบบประกอบด้วย 3 ช่วงตึก:

บริบทคือคลาสที่วัตถุควรเปลี่ยนพฤติกรรมขึ้นอยู่กับสถานะ

สถานะคือส่วนต่อประสานที่แต่ละสถานะที่เป็นรูปธรรมต้องดำเนินการ ผ่านทางอินเทอร์เฟซนี้ วัตถุบริบทโต้ตอบกับรัฐโดยการมอบหมายการเรียกเมธอด อินเทอร์เฟซควรมีวิธีป้อนกลับไปยังวัตถุที่พฤติกรรมต้องการเปลี่ยนแปลง

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

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

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

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

2.2 กลยุทธ์

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

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

กลยุทธ์

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

จุดแข็ง:

  • การห่อหุ้มการดำเนินการของอัลกอริทึมต่างๆ ระบบจะเป็นอิสระจากการเปลี่ยนแปลงที่เป็นไปได้ในกฎทางธุรกิจ
  • เรียกอัลกอริทึมทั้งหมดด้วยวิธีมาตรฐานเดียว
  • ไม่ใช้คำสั่งสวิตช์และ/หรือเงื่อนไข

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

2.3 วิธีแม่แบบ

วิธีแม่แบบ

คลาสนามธรรม (คลาสนามธรรม) - กำหนดการดำเนินการนามธรรมที่ถูกแทนที่ในทายาทเพื่อใช้ขั้นตอนของอัลกอริทึม ใช้วิธีการเทมเพลตที่กำหนดโครงกระดูกของอัลกอริทึม เมธอดเทมเพลตเรียกการดำเนินการที่ถูกแทนที่และอื่นๆ ที่กำหนดไว้ในคลาส Abstract

คลาสคอนกรีต (คลาสคอนกรีต) - ใช้การดำเนินการที่ถูกแทนที่ในลักษณะที่จำเป็นสำหรับการใช้งาน คลาส Concrete จะถือว่าขั้นตอนที่ไม่แปรผันของอัลกอริทึมจะดำเนินการใน AbstractClass

รูปแบบนี้มักใช้เมื่อจำเป็น:

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

ใช่ รูปแบบนี้อธิบายการใช้คู่: คลาสนามธรรมและการนำไปใช้

2.4 ห่วงโซ่ความรับผิดชอบ

ห่วงโซ่ความรับผิดชอบคือรูปแบบการออกแบบเชิงพฤติกรรมที่ออกแบบมาเพื่อจัดระเบียบระดับความรับผิดชอบในระบบ

ห่วงโซ่ความรับผิดชอบ

ขอแนะนำให้ใช้แม่แบบในสภาวะที่:

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

2.5 ของที่ระลึก

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

ผู้พิทักษ์ (ของที่ระลึก)

รูปแบบ Guardian จะใช้เมื่อ:

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