Singleton (Creational Patterns)

Definition

Đảm bảo 1 class chỉ có 1 instance và cung cấp 1 phương thức để truy cập nó. Tần suất sử dụng trong JavaScript: 5/5 (high)

Summary

Singleton Pattern giới hạn số lượng instance của 1 object cụ thể chỉ là 1. Cái instance duy nhất này được goi là singleton.

Singleton rất hữu ích trong các trường hợp khi mà các hành động trong hệ thống lớn cần định hướng từ 1 điểm trung tâm. Ví dụ như là 1 tập hợp các kết nối tới database (database connection pool). Tập hợp này quản lý việc tạo, xóa và duy trì tất cả các database connection cho toàn bộ ứng dụng để chắc chắn không có connection nào bị mất kết nối.

Singleton giảm sự phụ thuộc vào các biến global (global variables) rất là quan trọng trong JavaScript bởi nó giới hạn namespace và cũng giảm nguy cơ dẫn đến xung đột tên.

1 vài pattern khác, như là Factory, Prototype và Facade cũng thường xuyên thực hiện như là các Singleton khi mà chỉ cần một instance.

Diagram

Participants

Các thành phần tham gia pattern này gồm có:

  • Singleton -- Trong ví dụ: Singleton
    • khởi tạo 1 phương thức getInstance() để return 1 instance duy nhất
    • chịu trách nhiệm tạo và quản lý đối tượng instance duy nhất này

Sample code in JavaScript

var Singleton = (function () {
    var instance;
 
    function createInstance() {
        var object = new Object("I am the instance");
        return object;
    }
 
    return {
        getInstance: function () {
            if (!instance) {
                instance = createInstance();
            }
            return instance;
        }
    };
})();
 
function run() {
 
    var instance1 = Singleton.getInstance();
    var instance2 = Singleton.getInstance();
 
    alert("Same instance? " + (instance1 === instance2));  
}

http://www.dofactory.com/javascript/singleton-design-pattern