Design Patterns – Singleton Pattern Nedir?

Bu yazıda SingletonPattern nedir? Hangi amaç ile kullanılır? Ne gibi durumlarda kullanmamız gerekir? Konularından bahsedeceğim.

Yapacağımız uygulamada bir sınıfımızdan sadece bir nesne oluşturulmasını sağlamak istediğimizde uygulayacağımız Design Pattern, Singleton Pattern’dir. Uygulamamızda oluşturacağımız bu nesne Singleton Pattern sayesinde ikinci bir nesnenin oluşturulmasını engelleyecektir.

Uygulamamızda ne gibi durumlarda kullanılmalı diye soracak olursanız uygulama ayarları gerektiren işlemlerde, bağlantı işlemlerinde kullanılabilmektedir.

Örnek bir uygulama yapalım. Uygulamamız tek bir nesne üretecek ve ikinci kez üretilmesini engelleyecek Singleton Pattern örneği olacak.

Singleton Pattern yaparken farklı yaklaşımlar mevcuttur. Bu farklı yaklaşımları örnekler üzerinde inceleyeceğiz.

Eager Initialization

Bu yaklaşımımızda uygulamamız ayağa kalkarken nesnemiz oluşturulmaktadır.

Classımızda oluşan nesnemiz uygulama oluşturulduğunda bir değişken oluşturulur.

Static Block Initialization

Eager Initialization’un aynısı diyebiliriz. Uygulama başladığında nesnemiz oluşturulur ancak burada oluşturulmuş ya da oluşturalacak nesnemiz üzerinde kontrol mekanizması oluşturabiliriz.

Static bir nesne oluşturarak hata işlemlerini yakalabilmekteyiz.

Lazy Initialization

Bu Singleton Pattern yaklaşımında nesnemiz biz isteğimiz zaman oluşturulmakta ve aynı nesnenin oluşup oluşmadığı kontrol ederek eğer oluşmadıysa nesnenin oluşturulmasını sağlamaktayız.

Bu sayede “aynı nesnenin ikinci kez” oluşturulmasının da önüne geçiyoruz.

Lazy Initialization ve Double Check Locking

Uygulamamızda Lazy Initialization yapısı kullanarak bir Singleton Pattern oluşturduk. Uygulamamızda ikinci kez nesnemizin oluşturulmasını engellemek için kontrol mekanizmasını genişlettiğimiz yaklaşımdır.

Bill Pugh Singleton

Bu yaklaşımda static nested class oluşturarak nesnemizin üretilmesini sağlamaktayız.

Thread Safe Singleton

Bu yaklaşımda uygulamamıza birden çok aynı anda nesne oluşturulması işleminde aynı anda istek gelse bile sadece birtanesinin işlenmesi sonra diğerini işleme alarak nesnemiz oluştuysa tekrar oluşturulmasını engellemek için yapıtığımız bir Singleton Pattern yaklaşımıdır.

Bu yaklaşımda uygulamamızda bu nesne için oluşturmak isteyen birden fazla isteği synchronized yaparak sıraya sokuyoruz ve oluşmadı ise nesnemizi oluşturuyoruz.

1 comment

  1. Ali

    Eager’i TypeScript ile şöyle denedim. Olmuş mu? (:

    class SingletonExample {
    private static nesne = new SingletonExample();

    private SingletonExample() {

    }

    public static getNesne() {
    return this.nesne
    }

    public getPlayer() {
    console.log(“Player”);
    }
    }

    class TestSingleton {
    constructor() {
    var ref = SingletonExample.getNesne();

    ref.getPlayer();
    }
    }

    new TestSingleton();

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir