Aşamalı Oluşturucu Desen
Statik fabrika yöntemleri ve oluşturucular, çok sayıda parametreyle başa çıkmada yetersiz kalabilir. Örneğin, bir sınıfın 6 alanı ve 2 parametreli, 3 parametreli vb. oluşturuculara ihtiyacı varsa, aşağıdaki gibi aşamalı oluşturucu desenini kullanabiliriz.
Ancak bu bile parametre sayısı arttığında, kodu okurken her bir değerin ne anlama geldiği konusunda kafalar karışabilir ve aynı türdeki parametreleri karıştırarak yanlış değerler atanabilir.
Java Bean'leri Desen
Java Bean'leri deseni, parametresiz bir oluşturucuyla nesne oluşturup, daha sonra ayarlayıcı (setter) yöntemlerini çağırarak istenen parametre değerlerini ayarlama yöntemidir.
Java Bean'leri deseni, parametre sayısı artsa bile değerleri karıştırmadan nesne oluşturmayı sağlar. Ancak, bir nesne oluşturmak için birden fazla ayarlayıcı (setter) yöntemini çağırmak gerekir ve nesne tamamen oluşturulana kadar tutarlılık bozulur. Bu nedenle, sınıfı değişmez hale getirmek mümkün değildir.
Yapıcı Desen
Aşamalı oluşturucu deseninin güvenilirliği ve Java Bean'leri deseninin okunabilirliğini birleştiren yapıcı deseni genellikle kullanılır.
İstemci, gerekli nesneyi doğrudan oluşturmak yerine, yalnızca zorunlu parametrelerle oluşturucuyu çağırarak bir yapıcı nesnesi elde eder. Ardından, yapıcı nesnesinin sağladığı bir tür ayarlayıcı (setter) yöntemiyle istenen isteğe bağlı parametreleri ayarlar. Son olarak, parametresiz build() yöntemini çağırarak gerekli nesneyi elde eder.
Builder sınıfındaki oluşturucu yalnızca zorunlu parametreleri alır ve diğer isteğe bağlı parametreler bir tür ayarlayıcı (setter) yöntemiyle doldurulur. Ve son olarak, build() yöntemi aracılığıyla tamamlanmış NutritionFactsWithBuilderPattern nesnesi oluşturulur. NutritionFactsWithBuilderPattern sınıfı değişmezdir ve yapıcının ayarlayıcı (setter) yöntemleri, yapıcının kendisini döndürdüğü için ardışık olarak çağrılabilir. Bu yönteme akıcı API veya yöntem zincirleme denir.
İstemci açısından, yapıcı deseni sayesinde kodu yazması ve okuması kolay bir şekilde yazılabilir.
Hiyerarşik Olarak Tasarlanmış Sınıflarla İyi Uyum Sağlayan Yapıcı Desen
Pizza.Builder sınıfı, özyinelemeli tür kısıtlaması kullanan genel bir türdür ve self() adlı soyut bir yöntem ekleyerek alt sınıflarda tür dönüştürme yapmadan yöntem zincirlemeyi destekler. Alt sınıflarda bu soyut yöntemin dönüş değeri kendileri olmalıdır.
Şimdi, New York pizzası ve Calzone pizzası gibi Pizza'nın alt sınıflarına bakarak yapıcı deseninin esnekliğini görelim.
Her alt sınıfın yapıcısı tarafından tanımlanan build() sınıfı somut alt sınıfı döndürüyor. Alt sınıfların yöntemlerinin, üst sınıfın yöntemlerinin döndürdüğü türden değil, onun alt türünden dönüş sağlama özelliğine kovaryant dönüş yazımı denir. Bu özelliği kullanarak istemcilerin tür dönüştürme yapmasına gerek kalmaz.
İstemci açısından, Pizza'nın numaralandırmasını ve her alt sınıfın numaralandırmasını bir arada kullanabilir ve her birinin uygun yöntemleriyle nesneyi tamamlayabilir.
Yapıcı Deseninin Dezavantajları
- Yapıcı nesnesi oluşturulması gerekir.
- Kodun uzun olması.
Özet
Oluşturucu veya statik fabrika yöntemi tarafından işlenmesi gereken çok sayıda parametre varsa, yapıcı deseni düşünün.
Kaynaklar
- Etkin Java
Yorumlar0