# Singleton คืออะไร มีประโยชน์อย่างไร และใช้งานตอนไหน
คิดว่าน้องๆ อายุ 8 ปีกำลังเล่นกับของเล่นชิ้นโปรดที่บ้าน น้องๆ มีแค่ของเล่นชิ้นเดียวที่เป็นตัวละครหลักที่น้องๆ ชอบมากที่สุด ไม่ว่าจะทำอะไรในบ้าน ของเล่นชิ้นนั้นจะไปด้วยทุกที่ เพราะมันมีเพียงชิ้นเดียวที่สามารถทำให้น้องมีความสุขได้ที่สุด ในโลกของการเขียนโปรแกรม ก็มีเทคนิคที่คล้ายคลึงกันกับการมีของเล่นชิ้นเดียวที่เราเรียกว่า "Singleton" นั่นเอง
Singleton เป็นหนึ่งในแบบแผนการออกแบบ (Design Pattern) ที่ใช้ในการเขียนโปรแกรมคอมพิวเตอร์ หลักการของมันคือการจำกัดให้คลาส (class) หนึ่งๆ สามารถสร้างวัตถุ (object) ได้เพียงอันเดียวเท่านั้น ไม่ว่าเราจะพยายามสร้างเท่าไหร่ก็ตาม ทำให้เวลาที่เราใช้งาน วัตถุนั้นจะเป็นตัวเดียวกันในทุกๆ ที่ที่เรียกใช้
ประโยชน์ของ Singleton คือการควบคุมทรัพยากรให้มีเพียงชิ้นเดียวในโปรแกรม ซึ่งอาจจะเป็นการตั้งค่าระบบ (configuration) หรือการเชื่อมต่อฐานข้อมูล (database connection) ที่เราไม่ต้องการสร้างใหม่ทุกครั้งที่มีการเรียกใช้งาน นอกจากนั้นยังช่วยให้ระบบมีความสามารถในการจัดการทรัพยากรได้ดีขึ้น เพราะเราจะมั่นใจได้ว่าทรัพยากรนั้นถูกใช้งานอย่างมีประสิทธิภาพ
เราจะใช้ Singleton เมื่อต้องการจำกัดการสร้างวัตถุบางชนิดให้มีเพียงอันเดียวในระบบ ยกตัวอย่างเช่น:
- การจัดการการเชื่อมต่อฐานข้อมูล โดยปกติการเชื่อมต่อฐานข้อมูลจะใช้ทรัพยากรค่อนข้างสูง
- การตั้งค่าระบบที่โหลดมาจากไฟล์หรือค่าคอนฟิกที่กำหนดไว้ ซึ่งเราไม่ต้องการให้มีการโหลดซ้ำซ้อน
ลองนึกภาพว่า ในห้องเรียนมีตู้หนังสือเพียงตู้เดียวที่เก็บหนังสือเล่มโปรดของเพื่อนๆ ทุกคน ไม่ว่าใครต้องการอ่าน ก็ต้องมาค้นหาหนังสือจากตู้นี้เท่านั้น ไม่มีการหยิบจากตู้อื่นหรือสร้างหนังสือขึ้นมาใหม่ เพราะหนังสือเล่มนี้มีอยู่เพียงหนึ่งเล่มในโรงเรียน ณ เวลานั้น
ลองดูตัวอย่างโค้ดภาษา Python ที่ใช้แบบแผน Singleton:
class Singleton:
__instance = None
@staticmethod
def getInstance():
"""Static method to access the singleton instance."""
if Singleton.__instance == None:
Singleton()
return Singleton.__instance
def __init__(self):
"""Virtually private constructor."""
if Singleton.__instance != None:
raise Exception("This class is a singleton!")
else:
Singleton.__instance = self
# สร้างวัตถุจาก Singleton
s = Singleton.getInstance()
# พยายามสร้างอีกวัตถุจะเกิด Error
try:
s1 = Singleton()
except Exception as e:
print(e)
# วัตถุที่ได้จะมี Instance เดียวกันในทุกที่
print(s == Singleton.getInstance()) # Output: True
จากโค้ดข้างต้น สามารถเห็นได้ว่าไม่ว่าเราจะพยายามสร้างวัตถุใหม่จากคลาส Singleton อย่างไรก็ตาม ก็ไม่สามารถทำได้ จะได้วัตถุที่เป็นอินสแตนซ์เดียวกันเสมอ
การเรียนรู้การเขียนโปรแกรมเป็นทักษะที่สำคัญในโลกปัจจุบัน และการเข้าใจหลักการเช่น Singleton สามารถช่วยให้เราออกแบบชิ้นงานโปรแกรมได้อย่างมีประสิทธิภาพ นอกจากนี้การเรียนการเขียนโปรแกรมยังเปิดทางไปสู่โอกาสใหม่ๆ ในอนาคตมากมาย หากสนใจที่จะพัฒนาทักษะการเขียนโปรแกรมมากขึ้น การเรียนรู้กับหลักสูตรที่เหมาะสมและมีคุณภาพเป็นสิ่งที่ไม่ควรพลาด!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM