1 - Creatinal Patterns
2 - Behavioral Patterns
3 - Structural Patterns
Literatürde üçe ayrılır:
(Oluşturucu Tasarım Desenleri)
Bu desenler bir yada daha fazla nesnenin oluşturulması ve yönetilmesi ile ilgilidir.
(Davranışsal Tasarım Desenleri)
Bu gruptaki desenlerin amacı belirli bir işi yerine getirmek için çeşitli sınıfların nasıl birlikte davranabileceğinin belirlenmesidir.
Mediator
(Yapısal Tasarım Desenleri)
Bu gruptaki desenler ise çeşitli nesnelerin birbirleri ile olan ilişkileri temel alınarak tasarlanmıştır.
Temel sınıf nesnesini/nesnelerini oluşturan bir factory (fabrika) sınıf vardır. Nesneler temel sınıflar üzerinden değil, factory sınıf üzerinden türetilir.
Client code (istemci kod, bir diğer deyişle sınıfı kullanacak olan kod), factory sınıfa nesne türetme isteği yapar. Factory sınıf ise istemciye uygun bir nesne döndürür. Factory sınıfın temel görevi, istemcinin istediği nesneyi hangi sınıftan nasıl türeteceğini ondan soyutlamaktır.
Abstract factory, factory design'da gerçekleşen ürün üretimi yerine ürünün üretildiği fabrikaları üretmeyi sağlar.
ya da
Farklı ürün ailelerin için uygulanması söz konusu olduğu durumlarda tercih edilir. Mesela yazdığınız uygulamanın hem macos hem de windows platformunda çalışması sözkonusu olduğu durumlarda UI nasıl oluşması gerektiğini soyutlandırarak daha hızlı adapte edebileceğiniz bir yapı geliştirebilirsiniz.
Diyelim ki yeni bir eve taşınacaksınız ve oturma grubunuzu da o eve uygun olacak şekilde seçmek istiyorsunuz. Mobilyacıya gittiniz ve bir de baktınız ki farklı büyüklüklerde ve fiyatlarda birçok koltuk çeşidi mevcut. İşte problem! Seçimi hangi kritere göre yapacaksınız? Bu durumda hemen aklınıza belirlemeniz gereken iki parametre gelmiş olmalı. Bunlardan birincisi bütçeniz diğeri de evin salonunun boyutları olacaktır. Bu iki parametre ile mobilyacıya danıştığınızda istediğiniz kriterlere uygun bir mobilyayı daha rahat bir biçimde bulabilirsiniz.
Her if ya da switch yazdığınızda bir daha düşünün :)
If yazmaya son. Yaşasın OOP!
http://antiifcampaign.com
Bu pattern'i kullanmadan bir if-else ya da switch-case yapısı ile de halledilebilir. Ama bu SOLID prensiplerinden open-closed prensibine uymayacaktır. Çünkü ürünlerde genişlemeye gittiğimde her seferinde aynı yere uğrayacağımdan genişlerken değişmiş olacaktır.
Bir algoritmanın adımlarının abstract sınıfta tanımlanarak farklı adımların concrete sınıflarında overwrite edilip çalıştırılmasını düzenler.
Dofactory.com a göre kullanım oranı %60 civarındadır.
Template tasarım deseninde bir operasyonu gerçekleştirmek için gerekli olan adımlar ve bu adımları çalıştıracak metotlar abstract bir sınıfta tanımlanır. Bu abstract sınıfı uygulayan gerçek sınıflar gerekli adımları overwrite eder ve abstract sınıfında bu adımları kullanan metotlar çağrılarak işlem gerçekleştirilir. Böylece kod tekrarı yapılmasının önüne geçilmiş olunur.