Creational Patterns (Yaratımsal Desenler)

Merhaba,

Bir önceki yazıda Tasarım Desenlerinden söz etmiştim. Bu yazımda ise Yaratımsal Desenleri inceliyor olacağız. Öncelikle yaratımsal desenleri hatırlayalım:

Creational Patterns (Yaratımsal Desenler)

  • Factory Method
  • Abstact Factory
  • Builder
  • Singleton
  • Prototype

Şimdi sırayla bu metodları inceleyelim:

Factory Method

Factory (Fabrika) tasarım deseni, istemci tarafından verilen bilgilere göre nesne oluşumunu soyutlayarak merkezi bir yerden kontrol etmemizi sağlar. Sınıflar, arayüz üzerinden türetilir. Böylece, istemci ile işi yapacak olan nesne birbirinden ayrılarak gevşek bağlılık sağlanmış olur. Oluşturulacak nesnelerden birbirine benzer olanlar aynı arayüzden türetilerek gruplanır. Fabrika deseni, aynı zamanda sistemimizde tanımladığımız soyut sınıflardan örnekler oluşturmamızı sağlar. Fabrika deseni, Java’da en çok kullanılan desenlerden birisidir.

Örnek:

[caption id=”” align=”alignnone” width=”560"]

https://www.tutorialspoint.com/design_pattern/images/factory_pattern_uml_diagram.jpg[/caption]

Bu örnekte, Shape arayüzü ile ShapeFactory sınıfı kullanarak nesne tipine göre çizim işlemini yapıyoruz. Örneğin kodlarına buradan ulaşabilirsiniz.

Abstract Factory

Abstract Factory (Soyut Fabrika) tasarım deseni fabrika deseni ile benzer özelliklere sahiptir. Fabrikadan farkı tek bir arayüzden değil, her ürün ailesi için farklı bir arayüzden nesne oluşturmasıdır. Nesne oluşumunu arayüzler üzerinden gerçekleştirdiği için çok esnek ve genişletilebilir bir yapıya sahiptir. Bu metod birden fazla ürün ailesi ile çalışmak durumunda kaldığımızda, kullanacağınız ürün ailesi ile istemci tarafını soyutlamak için kullanılır. Fabrika sınıfında if-else blokları yazarken bu sınıfta if-else bloğu yazmayız. Diğer bir kullanım amacıda bu blokları yazmak/kullanmak istemememizdir.

Örnek:

[caption id=”” align=”alignnone” width=”560"]

https://www.tutorialspoint.com/design_pattern/images/abstractfactory_pattern_uml_diagram.jpg[/caption]

Bu örnekte, Shape ve Color arayüzleri ve bu arayüzleri uygulayan somut sınıflar oluşturuyoruz. Geri kalanı Fabrika metodundaki gibidir. Bu örneğe buradan ulaşabilirsiniz.

Builder

Ana nesnemizi oluşturmayı sağlayan nesneler birden fazla sayıda olabilirler ama tek bir üst sınıftan türerler. Bu desende nesnelerin oluşturulmasının sorumluluğu builder sınıfındadır. Oluşturulması istenilen nesne, composit bir nesne olmalıdır. Bu deseni, yuvarlandıkça büyüyen bir kartopu olarak düşünebiliriz.Oluşturulması istenilen nesneyi adım adım oluşturur ve en son halini bize verir.

[caption id=”” align=”alignnone” width=”560"]

https://www.tutorialspoint.com/design_pattern/images/builder_pattern_uml_diagram.jpg[/caption]

Builder ile ilgili örneğe buradan ulaşabilirsiniz.

Singleton

Singleton (Tek Nesne) tasarım deseni, bir sınıfın tek bir örneğini oluşturmak için kullanılır. Amaç, oluşturulan nesneye global erişim noktası sağlamaktır. Oluşturulan tek örnek, tüm isteklere kendi üzerinden cevap verir. Sistem çalıştığı sürece ikici bir örnek oluşturulamaz. Sınıf örneği new operatörü ile alınamaz. Geliştirilen teknik ile sınıf çağırıldığında statik örnek oluşturulur ve bundan sonraki çağırmalarda tüm istemcilere aynı örnek gönderilir. Burada dikkat edilmesi gereken nokta, çok istemcili sistemlerde ilk örnek oluşturulurken güvenli örnekleme yapılması ve oluşturulacak objenin kilitlenmesidir.

Örnek:

[caption id=”” align=”alignnone” width=”321"]

https://www.tutorialspoint.com/design_pattern/images/singleton_pattern_uml_diagram.jpg[/caption]

Singleton örneğine buradan ulaşabilirsiniz.

Prototype

Bir nesneyi tam manasıyla kopyalamak için mevcut nesnenin kendisi serilize edilerek bir veri kaynağına yazılır. Daha sonra o veri kaynağından deserilize edilerek yeni bir nesne oluşturulur. Prototype deseni, bu tarz bir kopyalama işleminin efektif olarak nasıl yapılması gerektiğini modeller. Bu sayede bellekte aynı türden iki farklı nesne yaratılır.

[caption id=”” align=”alignnone” width=”560"]

https://www.tutorialspoint.com/design_pattern/images/prototype_pattern_uml_diagram.jpg[/caption]

Prototype ile ilgili örneğe buradan ulaşabilirsiniz.