Singleton Tasarım Deseni (Singleton Design Pattern)

Singleton, yazılım mühendisliği ve nesne yönelimli programlamada kullanılan bir tasarım desenidir. Bu desen, bir sınıfın yalnızca bir örneğinin olmasını sağlar ve bu örneğe genel olarak “singleton örneği” veya “singleton nesnesi” denir.

Singleton deseni, bir sınıfın yalnızca bir örneğini oluşturmak ve bu örneğe her yerden erişim sağlamak amacıyla kullanılır. Bu, özellikle bir uygulamada yalnızca bir kaynak veya hizmete erişmek gerektiğinde ve birden fazla örnek oluşturulmasının gereksiz olduğu durumlarda faydalıdır.

(Birden fazla referansın aynı objeyi işaret etmesi, işaret ettiği obje ise singleton nesnesidir.)

Singleton deseni genellikle aşağıdaki özelliklere sahiptir:

  1. nesnenin yalnızca bir defa oluşturulması: Singleton sınıfının yalnızca bir örneği oluşturulur ve daha sonra bu örnek kullanılmak üzere saklanır.
  2. Global erişim sağlama: Singleton örneği, programın herhangi bir yerinden erişilebilir durumdadır. Bu, diğer sınıfların veya bileşenlerin singleton örneği üzerinde işlemler yapmasına olanak tanır.
  3. Tembel (lazy) veya erken (eager) yükleme: Singleton örneği, ihtiyaç duyulduğunda yaratılabilir (tembel yükleme) veya program başlatıldığında hemen oluşturulabilir (erken yükleme).

Singleton deseni, çeşitli programlama dillerinde uygulanabilir ve genellikle bir sınıfın static bir örneği üzerinden gerçekleştirilir. Bununla birlikte, singleton deseni kötü tasarlanmış veya yanlış kullanıldığında bazı dezavantajlara sahip olabilir, bu nedenle dikkatli bir şekilde kullanılmalıdır.

Java dilinde buna bir örnek verelim ;

public class ResourceManager {
    private static ResourceManager instance;
    private List<String> resources;

    private ResourceManager() {
        resources = new ArrayList<>();
    }

    public static ResourceManager getInstance() {
        if (instance == null) {
            instance = new ResourceManager();
        }
        return instance;
    }

    public void addResource(String resource) {
        resources.add(resource);
    }

    public void removeResource(String resource) {
        resources.remove(resource);
    }

    public void printResources() {
        for (String resource : resources) {
            System.out.println(resource);
        }
    }
}

Bu örnekte, ResourceManager sınıfını singleton olarak oluşturduk. getInstance metodu yoluyla yalnızca bir ResourceManager örneği alabiliriz. addResource, removeResource ve printResources metotları ile singleton örneği üzerinde işlemler yapabiliriz.

public class Main {
    public static void main(String[] args) {
        ResourceManager manager1 = ResourceManager.getInstance();
        ResourceManager manager2 = ResourceManager.getInstance();

        System.out.println(manager1 == manager2);  // true

        manager1.addResource("Resource 1");
        manager2.addResource("Resource 2");
        manager1.removeResource("Resource 1");

        manager1.printResources();  // Output: Resource 2
        manager2.printResources();  // Output: Resource 2
    }
}

Bu örnekte, manager1 ve manager2 değişkenleri aynı ResourceManager örneğini referans eder. Aynı şekilde, singleton örneği üzerinde yapılan işlemler her iki değişkeni de etkiler.

Şimdi burada yazanları kısaca özetleyelim, biraz daha teknik detaylara inelim ve gerçek bir projede bu tasarım desenini nasıl kullandığımıza göz atalım…

Singleton Tasarım Deseni

Yorum bırakın