Design Patterns ve Singleton Design Pattern

Mar 06, 2019

Dünya genelinde 250’den fazla tasarım kalıbı bulunmasına rağmen 23 tanesi standart olarak kabul edilmiştir. 1995’te Eric Gamma, Richard Helm, Ralph Johnson ve John Vlissides çıkarttıkları ‘Design Patterns:Element of Reusable’ adlı kitaplarında 3 kategoriden oluşan 23 farklı kalıba yer vermişlerdir.

KULLANIM ALANLARI VE ÖNEMİ

 
  Yazılım geliştirme sürecinde kodların yeniden kullanılabilirliğini sağlama, ortaya çıkan yazılımsal sorunları çözme ve bu çözümlerin standartlar haline getirilip yeniden kullanılabilir şekilde kodlanması sonucu oluşan sisteme ‘design pattern’ denir. Tasarım kalıpları genel şekliyle yazılım geliştiricilerin zaman içinde karşılarına gelen sorunlara ürettikleri çözümleri ele alarak oluşturulan standart ve en uygun çözüm yöntemleridir. Bu yöntemler bütün yazılımcılar tarafından kullanılabilirler. Büyük çaplı projelerde(sahibinden.com, e-devlet ,hepsiburada.com, devlet kurumlarının portal sistemleri vb. ) projenin çalışmasından çok uygulamanın çalışma performansı, etkili olması, uygulamanın güvenliği ,ileride yapılacak değişiklikler karşısında kodlamada karmaşıklığın olmaması ve aynı zamanda esnek, verimli bir yapıya sahip olması   gibi performans ve kod karmaşıklığının önlenmesi temelli konular önem sağlamaktadır. Bu noktada design pattern kavramı öne çıkar. Tüm yazılım geliştiriciler bir sorun karşısında aynı yöntemi yani standart tasarım  kalıbı kullandığı takdirde  tasarım kalıplarının kullanıldığı herhangi projenin kodları kolaylıkla çözülebilmektedir. Bu durumda geliştirilen yazılımı belli standartlara uygun hale getirip performansının artmasını ve projenin gerek olmayan kodlardan kurtulmasını sağlamış oluruz. Tasarım kalıpları yaratımsal, yapısal ve davranışsal olmak üzere 3 kategoriye ayrılır.

Creational Design Pattern (Yaratımsal Tasarım Kalıbı ): Yazılım sisteminde nesnelerin yaratılışı hakkında yol gösteren tasarım kalıbıdır.Sahip olduğu esnek yapı sayesinde nesnelerin yaratılmasıyla ilgili daha önceden belirtilmiş durumlara göre öneriler sunarak uygun nesneyi yaratır.Yarattığı nesneye esneklik kazandırır. Bu tasarım kalıbı Factory Method (Fabrika Yöntemi ), Abstract Factory (Soyut Fabrika ), Builder (Yapıcı ), Singleton (Yegane ) Prototype (Örnek ) olmak üzere 5 tanedir.

Structural Design Pattern (Yapısal Tasarım Kalıbı ): Yazılım sistemindeki nesneler arasındaki yapıları ifade eden tasarım kalıbıdır.Yapısal kalıplar sınıflar ve nesneleri birleştirmesi sayesinde daha geniş yazılım gruplarının kurulmasını sağlayan öneriler sunmuş olur.Yazılım projelerinin tasarım ve genişletilme aşamalarında kullanılırlar. Bu tasarım  kalıbı Adapter (Adaptör ), Bridge (Köprü ), Composite (Bileşik ), Decorator (Dekoratör ), Facade (Vitrin ), Flyweight (Sineksıklet ), Proxy (Vekil ) olmak üzere 7 tanedir.

Behavioral Design Pattern (Davranışsal Tasarım Kalıbı ): Yazılım sistemindeki nesnelerin davranışlarını takip eden , değiştirmek için kullanılan ve sınıflar arasındaki iletişim ile ilgili olan  tasarım kalıbıdır.Belirli görevlerin bu işler için tasarlanmış nesnelere gönderilmesi ardındanda geri dönen sonuçların işlenmesini sağlar. Bu tasarım kalıbı Chain of Responsibility (Sorumluluk Zinciri ), Command (Komut ), Interpreter (Yorumlayıcı ), Iterator (Tekrarlayıcı ), Mediator (Aracı ), Memento  (Hatırlayıcı ), Observe (Gözlemci ), State (Durum), Strategy (Strateji ), Template (Şablon ), Visitor (Ziyaretçi ) olmak üzere 11 tanedir.

SİNGLETON DESIGN PATTERN 

Singleton tasarım kalıbı kitapta yer alan creational kategorisinin altında olan 5  adet tasarım kalıbından biridir. Bu kalıp aynı kategoride yer aldığı kalıplardan farklı olarak nesne yaratma ile doğrudan ilgili değildir. Diğer 4 kalıp nesnelerin nasıl yaratılacağı ile ilgilenirken singleton tasarım kalıbı farklı bir problemi çözer. O da bir sınıftan sadece bir tane nesne üretme problemidir.Yani singleton tasarım kalıbı oluşturulan sınıftan sadece bir örneğin alınmasını sağlar.Bu sayede nesneden yeni bir tane oluşturulmasının ve kopyalanmasının önüne geçilmiş olunur ve ilgili nesneyi global hale getirir. .Aynı zamanda o nesneye ihtiyaç duyulduğunda nesnenin önceki örneği çağırılır. Genel olarak bir sınıftan kaç tane obje üretilidğini kontrol etmek istendiğinde singleton yapısı kullanılmış olur.Tek bir nesneye ihtiyaç duyulan durumlarda (veri tabanı bağlantıları, port bağlantıları, dosya işlemleri, loglama işlemleri,bildirimlerde, iş katmanı servislerimizde) kullanılır.. Bu kalıpta istenilen tek bir nesnenin yaratılması olduğundan ilgili sınıfın içinde nesnenin oluşturulması gerekir.Bu statik bir yöntem ile de mevcuttur.Nesne statik metodun içinde oluşturulup sınıfın gizli olan elemanına atanır. Tek üretilen nesneye geri dönmek için referansına dönmek yeterli olacaktır ama bu yöntem çok verimli bir yöntem değildir . Sebebi ise program belleğe yüklendiği anda bellekte bu tip sınıflar oluşturulur. Bu sebeple singleton design pattern kullanılarak tüm uygulama üzerinden bir kere oluşturulup defalarca kullanılan bir nesne tanımlanabilir.

Singleton tasarım kalıbının genel formu aşağıdaki gibidir.


 










     


Bu tasarım kalının kullanımı oldukça basittir. Singleton uygulanacak sınıfın constructor medodu private yapılır ardından sınıfın içinde kendi türünden static bir sınıf tanımlanır. Tanımlanan bu sınıfa erişebilmek için bir metod sınıfa eklenir.Bu kalıbın genel kullanım şekli bu şekildedir. Singleton pattern yaparken farklı versiyonlar mevcuttur.Bir versiyonda  nesneye özellik üzerinden erişilirken diğer versiyonda metod üzerinden erişilebilir.Değişmeyen tek nokta her iki erişim aracınında statik olmasıdır.