ผลต่างระหว่างรุ่นของ "แบบแผนซิงเกิลตัน"

เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
Pattana (คุย | ส่วนร่วม)
อ้างอิงและลิงค์ภายนอก
Jutiphan (คุย | ส่วนร่วม)
เก็บกวาดทันใจด้วยสคริปต์จัดให้
บรรทัด 1:
{{ชื่ออังกฤษ}}
 
'''ซิงเกิลตัน'''แพตเทิร์นเป็น[[Design Patterns|ดีไซน์แพตเทิร์น]]ที่ใช้จำกัดจำนวน[[ออปเจ็คอ็อบเจกต์]]ที่ถูกสร้างในขณะที่โปรแกรมทำงาน มีประโยชน์ในสถานการณ์ที่ทั้งระบบต้องมีออปเจ็คอ็อบเจกต์เพียงตัวเดียวเพื่อจะได้ไม่เกิดการทำงานซ้ำซ้อนกัน ตัวอย่างเช่น[[คลาส]]ที่ใช้สำหรับเป็นศูนย์รวมการตั้งค่าปรับแต่ง (configuration) ของโปรแกรมคอมพิวเตอร์ เมื่อเริ่มโปรแกรมออปเจ็คอ็อบเจกต์ของคลาสนี้จะอ่านค่าตั้งต้นจากไฟล์ ผู้ใช้โปรแกรมสามารถทำการปรับเปลี่ยนค่าและเซฟไฟล์เพื่อการใช้งานครั้งต่อไป ในกรณีนี้เราต้องการให้ทุกๆ ส่วนของโปรแกรมใช้ออปเจ็คอ็อบเจกต์ซิงเกิลตันเพียงตัวเดียวร่วมกัน เพื่อที่ทุกส่วนทำงานสัมพันธ์กันและไม่ต่างส่วนต่างเปลี่ยนแปลงค่าโดยส่วนอื่นๆ ไม่รับรู้
 
== การนำไปใช้งาน ==
[[ภาพ:singleton_class_diagram.jpg|frame|โครงสร้างของคลาสซิงเกิลตัน ในแบบ [[UML]]]]
 
ซิงเกิลตันแพตเทิร์นถูกสร้างโดยเขียนคลาสให้ซ่อนคอนสทรัคเตอร์ทั้งหมดไว้จากคลาสอื่นๆ คือให้คอนสทรัคเตอร์เป็นไพรเวท จากนั้นสร้างเมธอดมีหน้าที่สร้างออปเจ็คอ็อบเจกต์ของคลาสนี้ถ้ายังไม่ถูกสร้างและเก็บออปเจ็คอ็อบเจกต์ตัวที่ถูกสร้างใหม่นี้ไว้ จากนั้นส่งคืนออปเจ็คอ็อบเจกต์เพียงตัวเดียวนั้นให้ทุกครั้งที่มีการร้องขอออปเจ็คของคลาสอ็อบเจกต์ของคลาส
 
ข้อควรระวังสำหรับการใช้ซิงเกิลตันแพตเทิร์นในโปรแกรมที่ทำงานแบบ multi-threading คือหลายส่วนของโปรแกรมอาจจะพยายามเรียกเมธอดให้สร้างออปเจ็คอ็อบเจกต์เป็นครั้งแรกในเวลาเดียวกัน อาจทำให้มีการสร้างออปเจ็คอ็อบเจกต์ขึ้นมาเกินหนึ่งตัวได้ ในกรณีนี้ควรป้องกันโดยอนุญาตให้เพียงหนึ่งเธรดเรียกเมธอดได้ในขณะใดขณะหนึ่ง (mutually exclusive)
 
== ตัวอย่างโปรแกรม ==
บรรทัด 38:
<font color="#000000">Singleton.getInstance</font><font color="#000000">()</font><font color="#000000">.doWork</font><font color="#000000">()</font><font color="#000000">;</font>
 
== อ้างอิงและลิงค์ลิงก์ภายนอก ==
 
* Design Patterns: Elements of Reusable Object-Oriented Software (ISBN 0-201-63361-2) โดย Erich Gamma, Richard Helm, Ralph Johnson และ John Vlissides (Gang of four: GoF)