Singleton Pattern

Singleton pattern เป็น design pattern ที่ใช้จำกัดจำนวน object ที่ถูกสร้างในขณะที่โปรแกรมทำงาน มีประโยชน์ในสถานการณ์ที่ทั้งระบบต้องมี object เพียงตัวเดียวเพื่อจะได้ไม่เกิดการทำงานซ้ำซ้อนกันเช่น class สำหรับ setting ค่าต่าง ๆ

การนำไปใช้งาน
Singleton patter ถูกสร้างโดยเขียน class ให้ซ่อน constructor ทั้งหมดไว้จาก class อื่นๆ คือให้ constructor เป็น private จากนั้นสร้าง method มีหน้าที่สร้าง object ของ class นี้ ถ้ายังไม่ถูกสร้างและเก็บ object ตัวที่ถูกสร้างใหม่นี้ไว้ จากนั้นส่งคืน object เพียงตัวเดียวนั้นให้ทุกครั้งที่มีการร้องขอ object ของ class

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



ตัวอย่าง code เพื่อใช้งาน singleton
  1. sealed class Singleton {  
  2.     private Singleton() {}  
  3.     public static readonly Singleton instance = new Singleton();  
  4. }  

ตัวอย่าง code เพื่อใช้งาน singleton แบบ multi-threading (โดย Pugh, Bill)

  1. public class ThreadSafeSingleton {  
  2.     private ThreadSafeSingleton() {  
  3.     }  
  4.    
  5.     private static class SingletonHolder {  
  6.         private static ThreadSafeSingleton instance = new ThreadSafeSingleton();  
  7.     }  
  8.    
  9.     public static ThreadSafeSingleton getInstance() {  
  10.         return SingletonHolder.instance;  
  11.     }  
  12. }  

ส่งท้าย
singleton pattern ไม่สามารถทำไป implement กับ asp.net ได้เนื่องจากทุกครั้งที่เรา request CLR จะสร้าง instance ให้เรา 1 object โดยแต่ละ request จะมี object ที่อิสระจากกัน ฉะนั้นจึงอย่าพยายามใช้ single pattern กับ asp.net เพราะมันไม่มีทางเป็นไปได้

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

FancyBox not work in UpdatePanel

Convert float to int

Get QueryString from JavaScript