fbpx
วิกิพีเดีย

ซิงเกิลตันแพตเทิร์น

ซิงเกิลตันแพตเทิร์น (อังกฤษ: Singleton pattern) เป็นดีไซน์แพตเทิร์นที่ใช้จำกัดจำนวนอ็อบเจกต์ที่ถูกสร้างในขณะที่โปรแกรมทำงาน มีประโยชน์ในสถานการณ์ที่ทั้งระบบต้องมีอ็อบเจกต์เพียงตัวเดียวเพื่อจะได้ไม่เกิดการทำงานซ้ำซ้อนกัน ตัวอย่างเช่นคลาสที่ใช้สำหรับเป็นศูนย์รวมการตั้งค่าปรับแต่ง (configuration) ของโปรแกรมคอมพิวเตอร์ เมื่อเริ่มโปรแกรมอ็อบเจกต์ของคลาสนี้จะอ่านค่าตั้งต้นจากไฟล์ ผู้ใช้โปรแกรมสามารถทำการปรับเปลี่ยนค่าและเซฟไฟล์เพื่อการใช้งานครั้งต่อไป ในกรณีนี้เราต้องการให้ทุกๆ ส่วนของโปรแกรมใช้อ็อบเจกต์ซิงเกิลตันเพียงตัวเดียวร่วมกัน เพื่อที่ทุกส่วนทำงานสัมพันธ์กันและไม่ต่างส่วนต่างเปลี่ยนแปลงค่าโดยส่วนอื่นๆ ไม่รับรู้

โครงสร้างของคลาสซิงเกิลตัน ในแบบ UML

การนำไปใช้งาน

ซิงเกิลตันแพตเทิร์นถูกสร้างโดยเขียนคลาสให้ซ่อนคอนสทรัคเตอร์ทั้งหมดไว้จากคลาสอื่นๆ คือให้คอนสทรัคเตอร์เป็นไพรเวท จากนั้นสร้างเมธอดมีหน้าที่สร้างอ็อบเจกต์ของคลาสนี้ถ้ายังไม่ถูกสร้างและเก็บอ็อบเจกต์ตัวที่ถูกสร้างใหม่นี้ไว้ จากนั้นส่งคืนอ็อบเจกต์เพียงตัวเดียวนั้นให้ทุกครั้งที่มีการร้องขออ็อบเจกต์ของคลาส

ข้อควรระวังสำหรับการใช้ซิงเกิลตันแพตเทิร์นในโปรแกรมที่ทำงานแบบ multi-threading คือหลายส่วนของโปรแกรมอาจจะพยายามเรียกเมธอดให้สร้างอ็อบเจกต์เป็นครั้งแรกในเวลาเดียวกัน อาจทำให้มีการสร้างอ็อบเจกต์ขึ้นมาเกินหนึ่งตัวได้ ในกรณีนี้ควรป้องกันโดยอนุญาตให้เพียงหนึ่งเทร็ดเรียกเมธอดได้ในขณะใดขณะหนึ่ง (mutually exclusive)

ตัวอย่างโค้ด

ภาษา C#

โค้ดตัวอย่างการใช้คลาสชิงเกิลตันในภาษาซีชาร์ปด้วยวิธีดอตเน็ต

sealed class Singleton { private Singleton() {} public static readonly Singleton instance = new Singleton(); } 

ภาษา Java

ซอร์สโค้ดคลาสซิงเกิลตันในภาษาจาวา

public class Singleton { private static Singleton instance = null; private Singleton() {} public static Singleton getInstance() { if (instance == null) {  instance = new Singleton(); }  return instance; } public void doWork() { // do something } } 

การเรียกใช้งาน

Singleton.getInstance().doWork(); 

คลาสซิงเกิลตันแบบปลอดภัยในการทำงานแบบ multi-threading โดย Bill Pugh

public class ThreadSafeSingleton { private ThreadSafeSingleton() { } private static class SingletonHolder { private static ThreadSafeSingleton instance = new ThreadSafeSingleton(); } public static ThreadSafeSingleton getInstance() { return SingletonHolder.instance; } } 

ภาษา PHP

<?php class Singleton { private static $single; private function __construct() { } public static function getInstance() { if (self::$single === null) {  self::$single = new Singleton(); } return self::$single; } public function doWork() { // do something } public function __wakeUp(){ } public function __clone(){ } } ?> 

การเรียกใช้งาน

Singleton::getInstance()->doWork(); 

อ้างอิง

  • 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)

แหล่งข้อมูลอื่น

งเก, ลต, นแพตเท, งกฤษ, singleton, pattern, เป, นด, ไซน, แพตเท, นท, ใช, จำก, ดจำนวนอ, อบเจกต, กสร, างในขณะท, โปรแกรมทำงาน, ประโยชน, ในสถานการณ, งระบบต, องม, อบเจกต, เพ, ยงต, วเด, ยวเพ, อจะได, ไม, เก, ดการทำงานซ, ำซ, อนก, วอย, างเช, นคลาสท, ใช, สำหร, บเป, นศ, นย. singekiltnaephtethirn xngkvs Singleton pattern epndiisnaephtethirnthiichcakdcanwnxxbecktthithuksranginkhnathiopraekrmthangan mipraoychninsthankarnthithngrabbtxngmixxbecktephiyngtwediywephuxcaidimekidkarthangansasxnkn twxyangechnkhlasthiichsahrbepnsunyrwmkartngkhaprbaetng configuration khxngopraekrmkhxmphiwetxr emuxerimopraekrmxxbecktkhxngkhlasnicaxankhatngtncakifl phuichopraekrmsamarththakarprbepliynkhaaelaesfiflephuxkarichngankhrngtxip inkrninieratxngkarihthuk swnkhxngopraekrmichxxbecktsingekiltnephiyngtwediywrwmkn ephuxthithukswnthangansmphnthknaelaimtangswntangepliynaeplngkhaodyswnxun imrbruokhrngsrangkhxngkhlassingekiltn inaebb UML enuxha 1 karnaipichngan 2 twxyangokhd 2 1 phasa C 2 2 phasa Java 2 3 phasa PHP 3 xangxing 4 aehlngkhxmulxunkarnaipichngan aekikhsingekiltnaephtethirnthuksrangodyekhiynkhlasihsxnkhxnsthrkhetxrthnghmdiwcakkhlasxun khuxihkhxnsthrkhetxrepniphrewth caknnsrangemthxdmihnathisrangxxbecktkhxngkhlasnithayngimthuksrangaelaekbxxbeckttwthithuksrangihmniiw caknnsngkhunxxbecktephiyngtwediywnnihthukkhrngthimikarrxngkhxxxbecktkhxngkhlaskhxkhwrrawngsahrbkarichsingekiltnaephtethirninopraekrmthithanganaebb multi threading khuxhlayswnkhxngopraekrmxaccaphyayameriykemthxdihsrangxxbecktepnkhrngaerkinewlaediywkn xacthaihmikarsrangxxbecktkhunmaekinhnungtwid inkrninikhwrpxngknodyxnuyatihephiynghnungethrderiykemthxdidinkhnaidkhnahnung mutually exclusive twxyangokhd aekikhphasa C aekikh okhdtwxyangkarichkhlaschingekiltninphasasicharpdwywithidxtent sealed class Singleton private Singleton public static readonly Singleton instance new Singleton phasa Java aekikh sxrsokhdkhlassingekiltninphasacawa public class Singleton private static Singleton instance null private Singleton public static Singleton getInstance if instance null instance new Singleton return instance public void doWork do something kareriykichngan Singleton getInstance doWork khlassingekiltnaebbplxdphyinkarthanganaebb multi threading ody Bill Pugh public class ThreadSafeSingleton private ThreadSafeSingleton private static class SingletonHolder private static ThreadSafeSingleton instance new ThreadSafeSingleton public static ThreadSafeSingleton getInstance return SingletonHolder instance phasa PHP aekikh lt php class Singleton private static single private function construct public static function getInstance if self single null self single new Singleton return self single public function doWork do something public function wakeUp public function clone gt kareriykichngan Singleton getInstance gt doWork xangxing aekikhDesign Patterns Elements of Reusable Object Oriented Software ISBN 0 201 63361 2 ody Erich Gamma Richard Helm Ralph Johnson aela John Vlissides Gang of four GoF aehlngkhxmulxun aekikhSimply Singleton Archived 2013 09 07 thi ewyaebkaemchchin ody David Geary xngkvs Exploring the Singleton Design Pattern xngkvs bthkhwamekiywkbsxftaewr hrux opraekrmkhxmphiwetxrniyngepnokhrng khunsamarthchwywikiphiediyidodyephimkhxmulekhathungcak https th wikipedia org w index php title singekiltnaephtethirn amp oldid 9565351, wikipedia, วิกิ หนังสือ, หนังสือ, ห้องสมุด,

บทความ

, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม