1. Singleton pattern là gì?
Singleton pattern là một design pattern thuộc nhóm khởi tạo (Creational pattern), để hạn chế sự khởi tạo của lớp đối tượng.
2. Cấu trúc

3. Sử dụng Singleton pattern khi nào?
- Đảm bảo rằng chỉ có một instance của lớp được khởi tạo.
- Việc quản lý việc truy cập tốt hơn vì chỉ có một thể hiện duy nhất.
- Có thể quản lý số lượng thể hiện của một lớp trong giới hạn chỉ định.
4. Cách triển khai và code ví dụ
using System;
namespace Singleton
{
class Singleton
{
// Khóa phương thức khởi tạo của class bằng private, để không thể khởi tạo
// đối tượng theo cách thông thường
private Singleton() { }
// Sử dụng static để tạo instance
private static Singleton _instance;
public static Singleton GetInstance()
{
if (_instance == null)
{
_instance = new Singleton();
}
return _instance;
}
public static void someBusinessLogic()
{
// ...
}
}
class Program
{
static void Main(string[] args)
{
// Khởi tạo đối tượng Singleton
Singleton s1 = Singleton.GetInstance();
Singleton s2 = Singleton.GetInstance();
if (s1 == s2)
{
Console.WriteLine("Singleton đang làm việc");
}
else
{
Console.WriteLine("Singleton lỗi");
}
Console.ReadKey();
}
}
}
Thực tế, chúng ta nên sử dụng generic để sử dụng singleton pattern được mượt mà hơn, chỉ cần định nghĩa một class generic và nhiều class có thể sử dụng nó.
using System;
namespace SingletonGeneric
{
public class Singleton<T> where T : new()
{
private static T t = new T();
/// <summary>
/// Khởi tạo một Instance
/// </summary>
public static T Inst
{
get { return t; }
}
}
class ClassA
{
public ClassA()
{
// Do Something
// ...
}
public void Print()
{
Console.WriteLine("Generic class is working...");
}
}
class Program
{
static void Main(string[] args)
{
// Thực thi Singleton
Singleton<ClassA>.Inst.Print();
Console.ReadLine();
}
}
}