เพื่อนๆรู้จักแพทเทิร์นตัวนี้หรือยังครับ เป็นแพทเทิร์นที่สามารถนำมาใช้ลดจำนวนออปเจ็คซ้ำๆที่ต้องสร้างจำนวนมากให้น้อยลงด้วย
การใช้ออปเจ็คร่วมกัน ทำให้ลดคการใช้หน่วยความจำและเวลาในการสร้างออปเจ็คเหล่านี้ เหมาะสำหรับการใช้กับ JTable หรือ JTree ที่ต้องเก็บ cell หรือ node ที่มีจำนวนมากๆ รายละเอียดลองไปอ่านที่บทความนี้ครับ
http://www.javaworld...gnpatterns.html
ถ้าสงสัยหรือมีความเห็นเพิ่มเติม ลองมาคุยกันในกระทู้นี้ครับ
บทความ(อังกฤษ)ออน์ไลน์: Flyweight Pattern
Started by
นายข้าวโพดหวาน
, Jul 30 2003 05:13 AM
3 replies to this topic
#1
Posted 30 July 2003 - 05:13 AM
#2
Posted 30 July 2003 - 06:57 AM
อ่านจบแล้วครับ บางครั้งผมก็ใช้ pattern นี้แต่ไม่รู้ว่ามันมีชื่อว่า Flyweight
สำหรับการใช้ String.intern() นั้น ผมสงสัยว่าทำไมการรวม String โดย default ถึงไม่ทำ Flyweight เขามีเหตุผลอะไร? ถ้าเราต้องมานั่งเรียก String.intern() เองก็เท่ากับว่าเราต้อง manual optimize เองตลอดหรือ? แต่ก็เข้าใจว่า การที่ต้องตรวจสอบ String pool ตลอดคงไม่สนุกแน่
สำหรับการใช้ String.intern() นั้น ผมสงสัยว่าทำไมการรวม String โดย default ถึงไม่ทำ Flyweight เขามีเหตุผลอะไร? ถ้าเราต้องมานั่งเรียก String.intern() เองก็เท่ากับว่าเราต้อง manual optimize เองตลอดหรือ? แต่ก็เข้าใจว่า การที่ต้องตรวจสอบ String pool ตลอดคงไม่สนุกแน่
#3
Posted 01 August 2003 - 10:26 PM
String เป็นของที่ใช้มาก แล้วก็เป็นแบบใช้แล้วทิ้งนะครับ สร้างใหม่ขึ้นมาใช้เลย จะเร็วกว่าเข้าไปหาใน Pool เพราะจะต้องเสียเวลาในการหามาก
จุดสำคัญของ Flyweight คือการทำงานร่วมกับ Immutable Object ถ้าตัว Object ถูกออกแบบมาให้ไม่สามารถเปลี่ยนแปลงได้หลังจากที่ถูกสร้างขึ้นมา ก็สามารถนำมาแชร์ได้ ถ้าต้องการเปลี่ยนแปลง Object ก็อาจใช้วิธีแยก State เป็น Intrinsic และ Extensic State อย่างที่ Article บอก หรือไม่ก็ทำ Copy-On-Write เพื่อแยกออกมาเป็น 2 Objects แทนนะครับ
อีกจุดนึงเลยก็คือ Object ที่นิยมนำมาใช้กับ Flyweight มักเป็นพวก HeveyWeight ที่มีข้อมูลมาก ๆ หรือที่ใช้เวลาสร้างนาน ๆ เช่น Object ที่ต้องโหลดเอา State มาจาก Database เป็นต้น
จุดสำคัญของ Flyweight คือการทำงานร่วมกับ Immutable Object ถ้าตัว Object ถูกออกแบบมาให้ไม่สามารถเปลี่ยนแปลงได้หลังจากที่ถูกสร้างขึ้นมา ก็สามารถนำมาแชร์ได้ ถ้าต้องการเปลี่ยนแปลง Object ก็อาจใช้วิธีแยก State เป็น Intrinsic และ Extensic State อย่างที่ Article บอก หรือไม่ก็ทำ Copy-On-Write เพื่อแยกออกมาเป็น 2 Objects แทนนะครับ
อีกจุดนึงเลยก็คือ Object ที่นิยมนำมาใช้กับ Flyweight มักเป็นพวก HeveyWeight ที่มีข้อมูลมาก ๆ หรือที่ใช้เวลาสร้างนาน ๆ เช่น Object ที่ต้องโหลดเอา State มาจาก Database เป็นต้น
#4
Posted 02 August 2003 - 07:27 AM
เห็นด้วยกับคุณโฮ่ๆครับ
จะเห็นว่าแพทเทิร์นไม่ใช่สิ่งใหม่ แต่เป็นการตั้งชื่อสิ่งที่เราอาจเคยใช้อยู่แล้ว ให้เป็นชื่อมาตรฐานที่ทุกคนสามารถใช้อ้างถึงเวลาสื่อสารกัน ทำให้สื่อสารได้เร็วและเข้าใจตรงกัน จะได้ไม่ต้องเสียเวลาอธิบายรายละเอียด เหมือนกับเราสร้างไวยากรณ์คำขึ้นมาใหม่งัยครับ
จะเห็นว่าแพทเทิร์นไม่ใช่สิ่งใหม่ แต่เป็นการตั้งชื่อสิ่งที่เราอาจเคยใช้อยู่แล้ว ให้เป็นชื่อมาตรฐานที่ทุกคนสามารถใช้อ้างถึงเวลาสื่อสารกัน ทำให้สื่อสารได้เร็วและเข้าใจตรงกัน จะได้ไม่ต้องเสียเวลาอธิบายรายละเอียด เหมือนกับเราสร้างไวยากรณ์คำขึ้นมาใหม่งัยครับ
0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users












