Singleton Pattern
Creational Design Pattern(Yaratımsal Tasarım Desenleri)’ler kodun esnekliğini ve tekrar kullanılabilirliğini(reusability) arttıran çeşitli nesne oluşturma mekanizmalarıdır. Singleton Pattern(Tasarım Örüntüsü)’de bunlardan bir tanesidir.
Bu modelde bir class’ın yalnızca bir tane instance’ı olmalıdır.
Nasıl Çalışır?
Bir nesne oluşturdunuz ve sonrasında bu nesneye farklı bir alanda ihtiyacınız oldu ve yeniden oluşturmaya karar verdiniz. Bu durumda size yeni bir nesne değil var olan nesne dönecektir.
Bir class’ın singleton tasarım yapısına sahip olabilmesi için 3 ana unsura ihtiyacı vardır.
1-Bir private
constructor tanımlanır. Bu, sınıftan doğrudan yeni nesneler oluşturulmasını yani new’lenmesini engeller.
2-Referans tutmak için static
bir değişken olmalıdır bundan dolayı class ile aynı türde bir static
alan tanımlanır. Bu alan, sınıftan tek bir örneği tutacaktır.
3-Bir static
yöntem tanımlanır. Bu yöntem, static
alandaki nesneye erişmek ve onu döndürmek için kullanılır.
Neden Kullanılır?
Singleton pattern, aşağıdakiler gibi çeşitli nedenlerden dolayı kullanılabilir:
- Nesne Erişimini Kontrol Etmek: Bir nesnenin tek bir örneği olması, nesneye erişimin kontrol edilmesini kolaylaştırır. Bu, nesnenin durumunun tutarlı kalmasını ve istenmeyen değişikliklerin yapılmasını önler.
- Kaynak Kullanımını Optimize Etmek: Tek bir nesne kullanmak, bellekte ve diğer kaynaklarda tasarruf sağlayabilir. Özellikle pahalı kaynaklara erişen nesneler için bu önemlidir.
- Global Erişim Sağlamak: Tek bir nesne, programın herhangi bir yerinden erişilebilir. Bu, nesnenin durumunu tüm programda tutmak ve paylaşmak için kullanışlı olabilir.
Örnek Kullanım:
Aşağıda, basit bir singleton sınıfı örneği verilmiştir:
Java
public class Ayarlar {
private static Ayarlar instance; private String dil;
private int tema; private Ayarlar() {
// Yapıcıyı private yaparak doğrudan nesne oluşturmayı engelleriz.
} public static Ayarlar getInstance() {
if (instance == null) {
instance = new Ayarlar();
}
return instance;
} public String getDil() {
return dil;
} public void setDil(String dil) {
this.dil = dil;
} public int getTema() {
return tema;
} public void setTema(int tema) {
this.tema = tema;
}
}