Singleton Design Patern, bir nesnenin örnek sayısını yalnızca bir ile sınırlar ve bu örneğe singleton denir. Singleton, sistem genelindeki eylemlerin tek bir merkezden koordine edilmesi gereken durumlarda kullanışlıdır. Buna örnek olarak veritabanı bağlantısı verilebilir. Singleton ile veritabanı bağlantısının kabolmaması sağlanarak tüm uygulamalar için tüm veritabanı bağlantılarının oluşturullması, yok edilmesi ve kullanım ömrü yönetilir.

Singleton, Javscript’te özellikle önemli olan global değişkenlere olan ihtiyacı azaltır. Bunnu nedeni ad alanı kirliliğini ve ilişkili ad çakışna riskini sınırlar.
Singleton için bir metot tanımlanır (getInstance()) ve ihtiyaç dahilince nesnenin tedariğini ve yönetimini karşılayan bu metoda gidilir. Metot nesnenin intance’ı oluşturulmuş ise oluşturulmuş instancı’ı eğer oluşturulmamış ise nesnenin instancesini oluşturup yeni oluşturduğu intance’i geri döndürür.
getInstance metodu, Lazy Load adlı başka bir design pattern’i gösterir. Lazy Load, bir örneğin önceden oluşturulmuş olup olmadığını kontrol eder; oluşturulmamış ise, bir tane oluşturur ve ileride tekrar isteklere aynı cevabı vermek için saklar. Sonraki tüm isteklerde saklanan örnek döner. Lazy Load, yalnızca kesinlikle gerekli olduğunda nesneler oluşturarak bir CPU ve bellek tasarrufu tekniğidir.
Örnek Kod:
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();
console.log("Same instance? " + (instance1 === instance2));
}