บทความนี้อธิบายถึงโหมดความบันเทิงของรูปแบบการออกแบบ Java แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
อธิบายแนวคิด: นั่นคือหากมีวัตถุที่เหมือนกันหลายอย่างในระบบจากนั้นเพียงแค่แบ่งปันหนึ่งสำเนาและไม่จำเป็นต้องสร้างอินสแตนซ์วัตถุสำหรับแต่ละชุด ตัวอย่างเช่นในระบบข้อความตัวอักษรแต่ละตัวจะถูกกำหนดเป็นวัตถุดังนั้นจึงมีตัวอักษรตัวพิมพ์เล็กบนและล่าง 52 ตัวดังนั้นจึงต้องกำหนดวัตถุ 52 วัตถุ หากมีข้อความ 1M แสดงว่ามีตัวอักษรมากมาย หากตัวอักษรแต่ละตัวกำหนดวัตถุหน่วยความจำจะระเบิดมานานแล้ว จากนั้นถ้าตัวอักษรแต่ละตัวแบ่งปันวัตถุก็จะประหยัดทรัพยากรได้อย่างมาก
ในโหมดฟลายเวทเนื่องจากจะมีการสร้างวัตถุต่าง ๆ โหมดโรงงานมักจะปรากฏในโหมดฟลายเวท สถานะภายในของฟลายเวทใช้เพื่อแบ่งปัน Flyweight Factory รับผิดชอบในการรักษาพูลจัดเก็บข้อมูล (พูลฟลายเวท) เพื่อจัดเก็บวัตถุที่มีสถานะภายใน โหมด Flyweight เป็นโหมดที่ปรับปรุงประสิทธิภาพของโปรแกรมและประสิทธิภาพซึ่งจะเพิ่มความเร็วในการทำงานของโปรแกรมอย่างมาก มีหลายโอกาสในการใช้งานดังนี้:
ก่อนกำหนดคลาสฟลายเวทนามธรรม:
แพ็คเกจฟลายเวท; ฟลายเวทระดับนามธรรมสาธารณะ {Public Abstract Void Operation ();}ใช้คลาสเฉพาะ:
แพ็คเกจ Flyweight; Public Class Concreteflyweight ขยาย flyweight {สตริงส่วนตัว String; Concreteflyweight สาธารณะ (String Str) {String = Str;} การดำเนินการโมฆะสาธารณะ () {System.out.println ("คอนกรีต --- ฟลายเวท:"ใช้คลาสวิธีการเป็นโรงงาน:
แพ็คเกจฟลายเวท; นำเข้า java.util.hashtable; Public Class FlyweightFactory {Flyweights แฮชท์ส่วนตัว = ใหม่ hashtable (); // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - โมฆะ){//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -คลาสวิธีการโรงงานนี้มีความสำคัญมากนี่คือคำอธิบายโดยละเอียด:
Hashtable ถูกกำหนดไว้ที่ 1 เพื่อจัดเก็บแต่ละวัตถุ วัตถุที่จะสร้างอินสแตนซ์ถูกเลือกที่ 2 และวัตถุที่จะส่งคืนที่ 6 หากไม่มีวัตถุที่จะเลือกในแฮชชูได้ตัวแปรฟลายเวทเป็นโมฆะและฟลายเวทใหม่ถูกสร้างขึ้นเพื่อเก็บไว้ใน hashtable และวัตถุจะถูกส่งคืน
สุดท้ายมาดูการโทรของฟลายเวท:
แพ็คเกจฟลายเวท; นำเข้า java.util.hashtable; คลาสสาธารณะ FlyweightPattern {โรงงาน flyweightfactory = ใหม่ flyweightfactory (); flyweight fly1; flyweight fly2; flyweight fly3; flyweight fly4; flyweight fly5; Factory.getFlyweight ("Google"); fly2 = factory.getflyweight ("qutr"); fly3 = factory.getflyweight ("google"); fly4 = factory.getflyweight ("google"); fly5 = factory.getflyweight ("Google"); showflyweight () {fly1.Operation (); fly2.Operation (); fly3.Operation (); fly4.Operation (); fly5.Operation (); fly6.Operation (); int objsize = factory.getflyweightsize (); args) {system.out.println ("รูปแบบ flyweight!"); flyweightpattern fp = new flyweightpattern (); fp.showflyweight ();}}นี่คือผลการทำงาน:
คอนกรีต --- ฟลายเวท: Google
คอนกรีต --- ฟลายเวท: Qutr
คอนกรีต --- ฟลายเวท: Google
คอนกรีต --- ฟลายเวท: Google
คอนกรีต --- ฟลายเวท: Google
คอนกรีต --- ฟลายเวท: Google
objsize = 2
เราได้กำหนดวัตถุ 6 ชิ้นซึ่ง 5 ชิ้นนั้นเหมือนกัน ตามคำจำกัดความของโหมดฟลายเวท "Google" ควรแชร์วัตถุ ในจำนวนวัตถุจริงเราจะเห็นว่ามีเพียง 2 วัตถุ
สรุป:
โหมดฟลายเวทมีความสำคัญมากเพราะสามารถช่วยให้คุณประหยัดพื้นที่หน่วยความจำจำนวนมากในระบบที่ซับซ้อน ในภาษา Java ประเภทสตริงใช้โหมดสารานุกรม วัตถุสตริงเป็นประเภทสุดท้ายและไม่สามารถเปลี่ยนแปลงได้เมื่อสร้างขึ้น ใน Java ค่าคงที่สตริงมีอยู่ในสระคงที่ Java จะตรวจสอบให้แน่ใจว่าค่าคงที่สตริงมีเพียงหนึ่งสำเนาในพูลคงที่ String A = "ABC" โดยที่ "ABC" เป็นค่าคงที่สตริง
ผู้ที่คุ้นเคยกับ Java ควรรู้ตัวอย่างต่อไปนี้:
String a = "hello"; string b = "hello"; ถ้า (a == b) system.out.println ("ตกลง"); elsesystem.out.println ("ข้อผิดพลาด");ผลลัพธ์ผลลัพธ์คือ: ตกลง จะเห็นได้ว่าหากเงื่อนไขเปรียบเทียบที่อยู่ของสอง A และ B หรืออาจกล่าวได้ว่าเป็นพื้นที่หน่วยความจำ
สรุปหลัก: วัตถุที่สามารถแชร์ได้นั่นคือวัตถุที่ส่งคืนประเภทเดียวกันนั้นเป็นอินสแตนซ์เดียวกัน เมื่อลูกค้าต้องการวัตถุที่จะสร้างโรงงานจะตรวจพบว่ามีอินสแตนซ์ของวัตถุนี้อยู่หรือไม่ หากมีอยู่ให้ส่งคืนอินสแตนซ์ของวัตถุนี้โดยตรง หากไม่มีอยู่ให้สร้างและบันทึก สิ่งนี้มีความหมายบางอย่างของรูปแบบซิงเกิล โดยปกติแล้วคลาสโรงงานจะมีตัวแปรสมาชิกประเภทที่ตั้งไว้เพื่อบันทึกวัตถุเช่นแฮชช์, เวกเตอร์, ฯลฯ ใน Java, พูลเชื่อมต่อฐานข้อมูล, พูลเธรด ฯลฯ เป็นแอปพลิเคชันที่ใช้โหมด Enyuan
สำหรับเนื้อหาที่เกี่ยวข้องกับ Java เพิ่มเติมผู้อ่านที่สนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "โครงสร้างข้อมูล Java และการสอนอัลกอริทึม", "บทสรุปของเคล็ดลับการดำเนินการ Java Dom Node", "บทสรุปของไฟล์ Java และเคล็ดลับการดำเนินการไดเรกทอรี" และ "สรุป
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน