Fabrikalar, bazı durumlarda şık uygulama tasarımlarına izin veren birçok avantaja sahiptir. Birincisi, daha sonra bir fabrika oluşturarak bir yerde oluşturmak istediğiniz nesnelerin özelliklerini ayarlayabilmeniz ve daha sonra bu fabrikayı teslim edebilmenizdir. Ancak çoğu zaman bunu gerçekten yapmanız gerekmez. Bu durumda bir Fabrika kullanımı, size karşılığında hiçbir şey vermeden, sadece ek bir karmaşıklık ekler. Bu fabrikayı ele alalım, örneğin:
WidgetFactory redWidgetFactory = new ColoredWidgetFactory(COLOR_RED);
Widget widget = redWidgetFactory.create();
Fabrika modeline bir alternatif, benzer yapı modeline benzer. Temel fark, bir Fabrika tarafından yaratılan nesnelerin özelliklerinin Fabrika başlatıldığında, bir Oluşturucu varsayılan durumla başlatıldığında ve tüm özelliklerin daha sonra ayarlanmasıdır.
WidgetBuilder widgetBuilder = new WidgetBuilder();
widgetBuilder.setColor(COLOR_RED);
Widget widget = widgetBuilder.create();
Ancak aşırı mühendislik yapmak sizin probleminiz olduğunda, bir Fabrika'yı bir Oluşturucu ile değiştirmek muhtemelen bir gelişme değildir.
Her iki model için de en basit alternatif, new
operatörle basit bir kurucu ile nesne örnekleri oluşturmaktır.
Widget widget = new ColoredWidget(COLOR_RED);
Bununla birlikte, inşaatçılar çoğu nesne yönelimli dilde çok önemli bir dezavantaja sahiptir: Bu sınıfın bir nesnesini döndürmeleri gerekir ve bir alt tür döndüremezler.
Çalışma zamanında alt türü seçmeniz gerektiğinde, ancak bunun için tamamen yeni bir Oluşturucu veya Fabrika sınıfı oluşturmaya başvurmak istemiyorsanız, bunun yerine fabrika yöntemini kullanabilirsiniz. Bu, o sınıfın veya alt sınıflarından birinin yeni örneklerini döndüren bir sınıfın statik bir yöntemidir. Herhangi bir iç durumu sağlamayan bir Fabrika genellikle böyle bir fabrika yöntemiyle değiştirilebilir:
Widget widget = Widget.createColoredWidget(COLOR_RED); // returns an object of class RedColoredWidget
Java 8'deki yeni bir özellik , tıpkı bir vatansız fabrika ile yaptığınız gibi, yöntemleri geçmenize izin veren yöntem referanslarıdır . Bir yöntem referansını kabul eden herhangi bir şey aynı zamanda, aynı işlevsel arayüzü uygulayan herhangi bir nesneyi de kabul eder; bu, aynı zamanda dahili devlete sahip tam teşekküllü bir Fabrika olabilir, böylece bunu yapmak için bir neden gördüğünüzde fabrikaları kolayca tanıtabilirsiniz.