Singleton Nedir?
Singleton, bir sınıfın sadece bir tek örneğine izin verilmesini ve bu örneğe uygulamanın tümüne için bir global erişim noktası sağlamayı amaçlayan yazılım mühendisliği içinde bir tasarım desenidir. Bu, bir programın çalışması boyunca sadece bir sınıfın tek bir örneğinin kontrol etme ihtiyacı olan durumlarda kullanışlıdır, örneğin birden fazla nesnenin paylaştığı tek bir veritabanı bağlantısı, günlükleme veya önbellekleme. Singleton sınıfı, bir sınıfın yalnızca bir tek örneğinin oluştuğunu garantiler, özel bir constructor tanımlayarak ve gerektiğinde oluşturacak tek örnek sınıfı döndüren statik bir instance değişken tanımlayarak.
Analiz
Başlamadan önce, seride her makalede birçok UML sınıf diyagramı bulacaksınızı belirtmeliyim. Sınıf diyagramlarının ve notasyonlarının tanıdık değilse, bu referansı okumanızı şiddetle öneririm. Sınıf diyagramı ve temel yapı Singleton’ın uygulamasına genel bir yaklaşım aşağıdaki sınıf diyagramında gösterilir:
Sınıf Diyagramı – Singleton Singleton sınıfı, sınıf örneğinin kendisi için bir referans olan statik özellik instance’ı içerir (bu ilişki sınıf Singleton’dan kendine olan bir ilişki olarak temsil edilir); Bu örnek yalnızca statik yöntem getInstance () aracılığıyla erişilebilir; Sınıf yapıcısı, sınıf dışından sınıfın instantiate edilememesini sağlamak için özel olarak işaretlenmiştir (diğer uygulamalarda korunmuş olabilir).
Uygulanabilirlik
Singleton tasarım deseni, sınıfın sadece bir örneğinin yürütmenin tümünde eylemi kontrol etmek için gerekli olduğu durumlarda uygulanır. Singleton deseninin kullanıldığı bazı senaryolar şunlardır:
- Günlükler: Günlüklemede, uygulamanın tümünde sadece bir günlükleyici örneği oluşur ve tüm günlük mesajları bu örneğe yazılır.
- Önbellekleme: Uygulamanın tümünde sadece bir önbellek depolama örneği oluşur, böylece önbellekli verilerin yönetimi için tek bir kontrol noktası vardır.
- İş Parçacığı Havuzları: Sadece bir iş parçacığı havuzu örneği oluşur, böylece iş parçacıklarının sayısı merkezi olarak yönetilebilir.
- Veritabanı Bağlantıları: Sadece bir veritabanı bağlantısı örneği oluşur, böylece veritabanı bağlantısı merkezi olarak yönetilebilir.
- Yapılandırmalar: Yapılandırma bilgilerinin yönetimi için sadece bir yapılandırma yöneticisi örneği oluşur.
Bu, Singleton deseninin kullanıldığı bazı örneklerdir. Kısaca, Singleton deseni, sınıfın tüm çalışma süresince sadece bir örneğinin olması gerektiği durumlarda kullanılması gerekir.
Oluşturma
Singleton tasarım deseninin uygulaması basit ve açık. Dart ve Flutter’da uygulamanın adımları şunlardır:
- Özel bir yapıcı ile sınıf tanımlama: İlk adım, diğer sınıfların onu oluşturmasını önleyen bir özel yapıcı ile sınıf tanımlamaktır.
- Statik bir instance özelliği oluşturma: Sınıfın tek bir örneğini tutacak statik bir instance özelliği oluşturun. Bu özellik, sınıfın aynı tipinde olmalıdır.
- Statik bir getInstance() metodu oluşturma: Sınıfın örneğini döndüren statik bir getInstance() metodu oluşturun. Bu metod, örnek null ise, yeni bir örnek oluşturması gerektiğini kontrol etmelidir. Örnek null değilse, mevcut örneği döndürmelidir.
- getInstance() metodunu kullanma: Sınıfın örneğine erişmek için getInstance() metodunu çağırın. Bu metod, sınıfın tek bir örneğini garanti ederek, uygulamadaki sınıfın sadece bir örneğinin bulunduğunu garantiler.
Dart’da Singleton tasarım deseninin uygulaması için bir örnek aşağıdaki gibidir:
class Singleton {
static final Singleton _instance = Singleton._privateConstructor();
static Singleton get instance => _instance;
Singleton._privateConstructor();
}
Bu örnekte, Singleton adlı bir sınıf tanımlıyor ve diğer sınıfların onu oluşturmasını önleyen bir özel yapıcı oluşturuyoruz. Ayrıca, sınıfın tek bir örneğini tutacak statik bir instance özelliği ve sınıfın örneğini döndüren statik bir getInstance() metodu oluşturuyoruz.