4.1 ผู้สร้าง

Builderเป็นรูปแบบการออกแบบเชิงสร้างสรรค์ที่ให้วิธีสร้างวัตถุผสม

แยกการสร้างวัตถุที่ซับซ้อนออกจากการนำเสนอ เพื่อให้กระบวนการก่อสร้างเดียวกันสามารถให้ผลลัพธ์ที่แตกต่างกันได้

ผู้สร้าง

จุดแข็ง:

  • อนุญาตให้คุณเปลี่ยนการแสดงภายในของผลิตภัณฑ์
  • แยกรหัสที่ใช้สร้างและนำเสนอ
  • ให้การควบคุมกระบวนการออกแบบที่ละเอียดยิ่งขึ้น

ด้านที่อ่อนแอ:

  • อัลกอริทึมสำหรับการสร้างวัตถุที่ซับซ้อนไม่ควรขึ้นอยู่กับว่าวัตถุประกอบด้วยส่วนใดและประกอบกันอย่างไร
  • กระบวนการก่อสร้างจะต้องแสดงวัตถุที่กำลังสร้างที่แตกต่างกัน

ตัวอย่างที่ดีคือคลาส HttpRequest ซึ่งมีคลาสย่อย HttpRequest.Builder ที่สามารถใช้สร้างอินสแตนซ์ของคลาส HttpRequest และตรวจสอบว่าถูกต้อง

4.2 การเริ่มต้นขี้เกียจ

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

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

การเริ่มต้นขี้เกียจ

กรณีพิเศษของการเริ่มต้นขี้เกียจ - การสร้างวัตถุในขณะที่เข้าถึง - เป็นหนึ่งในรูปแบบการออกแบบเชิงสร้างสรรค์ โดยทั่วไปจะใช้ร่วมกับรูปแบบต่างๆ เช่น Factory Method, Loner และ Proxy

จุดแข็ง:

  • การเริ่มต้นจะดำเนินการเมื่อจำเป็นเท่านั้น
  • การเริ่มต้นเริ่มต้นของแอปพลิเคชันถูกเร่ง: ทุกอย่างที่สามารถเลื่อนออกไปได้จะถูกเลื่อนออกไป

ด้านที่อ่อนแอ:

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

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

4.3 กลุ่มวัตถุ

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

พูลวัตถุ

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

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

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