รูปแบบฟลายเวทคือรูปแบบการออกแบบโครงสร้างที่ช่วยให้ใช้หน่วยความจำและทรัพยากรการคำนวณได้อย่างมีประสิทธิภาพมากขึ้น เมื่อต้องจัดการกับวัตถุที่คล้ายกันจำนวนมาก ซึ่งทำได้โดยการลดความซ้ำซ้อนที่เกี่ยวข้องกับการจัดเก็บอินสแตนซ์ของออบเจ็กต์ และแบ่งปันคุณลักษณะของออบเจ็กต์ทั่วไปในหลายๆ อินสแตนซ์ เป้าหมายหลักของรูปแบบ Flyweight คือการลดพื้นที่หน่วยความจำโดยรวมของแอปพลิเคชัน ซึ่งจะช่วยปรับปรุงประสิทธิภาพและความสามารถในการปรับขนาด
ในบริบทของสถาปัตยกรรมซอฟต์แวร์และรูปแบบการออกแบบ รูปแบบฟลายเวทมีความเกี่ยวข้องเป็นพิเศษเมื่อทำงานกับวัตถุจำนวนมากที่มีลักษณะร่วมกันหลายประการ ตัวอย่างของสถานการณ์ดังกล่าวอาจรวมถึงการเรนเดอร์แผนที่ดิจิทัลขนาดใหญ่พร้อมองค์ประกอบกราฟิกนับล้าน (เช่น จุด เส้น รูปหลายเหลี่ยม) หรือการจัดการการจัดรูปแบบเอกสารที่ครอบคลุมในแอปพลิเคชันประมวลผลคำ
พื้นฐานของรูปแบบรุ่นฟลายเวตคือแนวคิดเกี่ยวกับสถานะภายในและภายนอก สถานะภายในหมายถึงคุณสมบัติที่ไม่เปลี่ยนรูปซึ่งแบ่งใช้ร่วมกันระหว่างออบเจ็กต์ที่คล้ายกัน ในขณะที่สถานะภายนอกแสดงถึงคุณสมบัติที่ไม่เปลี่ยนรูปแบบเฉพาะสำหรับแต่ละอินสแตนซ์ ในรูปแบบฟลายเวท ฟลายเวทเป็นวัตถุขนาดเล็กที่สามารถแชร์ได้ ซึ่งห่อหุ้มสถานะที่แท้จริงที่ใช้ร่วมกันโดยอินสแตนซ์วัตถุขนาดใหญ่ โดยทั่วไป สถานะภายนอกสำหรับอินสแตนซ์เหล่านี้จะถูกรักษาไว้ภายนอก และส่งผ่านไปยังฟลายเวทเมื่อจำเป็น
หากต้องการใช้รูปแบบ Flyweight สถาปนิกซอฟต์แวร์และนักพัฒนาควรทำตามขั้นตอนเหล่านี้:
- ระบุสถานะที่แท้จริงทั่วไปที่อินสแตนซ์อ็อบเจ็กต์ใช้ร่วมกัน
- สร้างคลาสรุ่นฟลายเวทเพื่อสรุปสถานะที่แท้จริงที่ใช้ร่วมกัน
- จัดเก็บการอ้างอิงถึงอินสแตนซ์ของคลาสรุ่นฟลายเวทในโรงงานรุ่นฟลายเวท ซึ่งจัดการการสร้าง การดึงข้อมูล และแบ่งปันวัตถุรุ่นฟลายเวท
- แทนที่สถานะที่แท้จริงในอินสแตนซ์ออบเจ็กต์หลักด้วยการอ้างอิงไปยังออบเจ็กต์ฟลายเวทที่เกี่ยวข้อง
- อัปเดตอินสแตนซ์ออบเจ็กต์หลักเพื่อจัดการสถานะภายนอก โดยส่งต่อตามความจำเป็นไปยังออบเจ็กต์ฟลายเวทที่เกี่ยวข้องสำหรับการคำนวณและการเรียกใช้เมธอด
มาดูตัวอย่างง่ายๆ ของการใช้รูปแบบฟลายเวทในบริบทของระบบแสดงแผนที่ดิจิทัล ในกรณีนี้ ระบบจะเรนเดอร์จุดหลายล้านจุด ซึ่งมีสถานะที่แท้จริงเหมือนกัน (เช่น สีและขนาด) แต่มีสถานะภายนอกที่เป็นเอกลักษณ์ (เช่น พิกัด) แทนที่จะให้แต่ละจุดเก็บสถานะที่แท้จริง คุณสามารถสร้างวัตถุรุ่นฟลายเวทเพื่อห่อหุ้มสถานะที่แท้จริงที่ใช้ร่วมกันและแบ่งปันมันในทุกอินสแตนซ์ของจุด ตัวจุดจะเก็บเฉพาะสถานะภายนอกที่เป็นเอกลักษณ์ (พิกัด) เท่านั้น วิธีการนี้จะนำไปสู่การประหยัดหน่วยความจำได้อย่างมากและเพิ่มประสิทธิภาพในระบบการเรนเดอร์แผนที่
AppMaster ซึ่งเป็นแพลตฟอร์ม no-code ทรงพลังที่ช่วยให้นักพัฒนาสามารถสร้างแบ็กเอนด์ เว็บ และแอปพลิเคชันมือถือได้ เหมาะอย่างยิ่งที่จะผสานรวมและใช้รูปแบบ Flyweight นักพัฒนาที่ใช้ AppMaster สามารถใช้ประโยชน์จาก Business Processes (BP) Designer ที่แข็งแกร่งเพื่อสร้างโมเดลข้อมูลและตรรกะทางธุรกิจที่มองเห็นได้ซึ่งรวมเอารูปแบบฟลายเวทในแอพของพวกเขา นอกจากนี้ เนื่องจากความสามารถในการปรับขนาดอันน่าทึ่งของ AppMaster และความสามารถในการสร้างซอร์สโค้ดแอปพลิเคชันจริง ลูกค้าที่ใช้ Flyweight Pattern จึงสามารถลดการใช้หน่วยความจำลงได้อย่างมาก ขณะเดียวกันก็รักษาประสิทธิภาพและการตอบสนองในระดับสูงไว้
ด้วยการนำรูปแบบ Flyweight มาใช้ สถาปนิกซอฟต์แวร์และนักพัฒนาจึงสามารถสร้างแอปพลิเคชันที่มีขนาดหน่วยความจำลดลง ประสิทธิภาพที่เหมาะสมที่สุด และความสามารถในการปรับขนาดที่ดีขึ้น เมื่อทำงานกับแอปพลิเคชันในโลกแห่งความเป็นจริงที่จำเป็นต้องจัดการหรือเรนเดอร์ออบเจ็กต์จำนวนมาก การรวมรูปแบบ Flyweight เข้าด้วยกันเป็นวิธีที่มีประสิทธิภาพในการเพิ่มประสิทธิภาพการใช้หน่วยความจำโดยไม่กระทบต่อฟังก์ชันการทำงาน ในบริบทของแพลตฟอร์มการพัฒนาแอปพลิเคชันที่หลากหลาย เช่น AppMaster นั้น Flyweight Pattern สามารถบูรณาการเข้ากับกระบวนการออกแบบภาพได้อย่างราบรื่น ซึ่งช่วยเพิ่มความสะดวกในการใช้งานและประโยชน์ที่เป็นไปได้