Factory Method

Erkin Sarıgil
2 min readMar 15, 2022

--

Gang of Four patternleri günümüz dünyasında en sıkı şekilde takip edilip en çok kullanılan ünlü tasarım desenleridir. Factory pattern’de bu 4 lü den biridir. Factory method Türkçe ismiyle fabrika yöntemi modelinin ne olduğuna gelirsek; bir nesne oluşturmak için sadece bir arayüz veya soyut sınıf tanımladığını, ancak hangi sınıfın başlatılacağına alt sınıfların karar vermesine izin verdiğini söyler. Kısaca açıklamak gerekirse, alt sınıflar, sınıfın örneğini oluşturmaktan sorumludur. Factory method, tek bir arayüzden türetilmiş sınıfların üretilmesi işlemini soyutlayan bir örüntüdür. Factory method nesne yönelimli programlama dillerinde en çok tercih edilen tasarım kalıplarından biridir. [1]

Factory Method tasarım deseninin sınıf yaratma üzerine kurulu bir yapısı vardır. Mantığını açıklamak gerekirse; Bir program yazdığımızı düşünelim. Bu programda birbirine benzeyen birden fazla sınıf olabilir. Bu sınıfları oluştururken birbirinden bağımsız gibi kod yazmamız bizim için doğru bir yöntem olmaz. Faktory method sayesinde birbirine benzer sınıflar arasında bir örüntü tasarlanmış. Fabrikada da birbirine benzer ürünler üretilirken aynı mantık kullanıldığı için bu durumu fabrikaya benzetmişler. İsmini buradan almış diyebiliriz.

Factory Method tasarım modeli, nesnelerin yapısını nesnelerin kendilerinden ayırarak SOLID programlama ilkeleri dahilinde kalmak için normal sınıf yapıcısı yerine kullanılır. Factory Method tasarım modeli birçok avantaja sahiptir;

  • Factory Method, alt sınıfların oluşturulacak nesnelerin türünü seçmesine izin verir.
  • Önceden belirlenmemiş, ancak yalnızca bir “arabirim” içinde tanımlanan veya dinamik bir tür olarak tanımlanan bir türden bir bileşen içeren sınıfların oluşturulmasına izin verir.
  • Bileşen tipi önceden belirlenmemiş, ancak sadece bir ara yüzde tanımlanmış veya dinamik tip olarak tanımlanan bir ebeveyn için alt sınıfların oluşturulmasına izin verir.
  • Her biri farklı bir nedenden ötürü birden çok kurucunun bulunduğu durumlarda daha okunabilir koda izin verir.
  • Bir sınıfın alt sınıflara örneklemeyi ertelemesine ve ana sınıf türünden bir nesnenin doğrudan somutlaştırılmasını önlemesine izin verir. [2]

Bir örnek vererek Factory Method tasarım modelini daha iyi anlatmak istiyorum. Elimizde bir tane labirent oyunu olduğunu düşünelim. Bu labirent oyunu biri yalnızca bitişik odalarla bağlantılı normal odalarla ve diğeri oyuncuların rastgele taşınmasına izin veren sihirli odalarla olmak üzere iki mod da oynanabilir olsun. [2]

Şekil-1: Labirent Oyunu UML Diyagramı[2]
Şekil-1: Labirent Oyunu UML Diyagramı[2]

Room sınıfı MagicRoom sınıfı veya OrdinaryRoom sınıfı için temel sınıftır. MazeGame böyle bir temel ürün üretmek için factory method ilan eder. MagicRoom ve OrdinaryRoom nihai ürünü uygulayan temel ürünün alt sınıflarıdır. OrdinaryRoom sıradan yani sihirli olmayan modda kullanılan odalar içindir. MagicMazeGame ve OrdinaryMazeGame, factory method kullanan MazeGame sınıfının alt sınıflarıdır. Burada aynı şekilde OrdinaryMazeGame oyunu normal şekilde oynayanlar içindir. MazeGame, Böylece factory method, arayanları (MazeGame) somut sınıfların uygulanmasından ayırır. Bu, “yeni” Operatörü gereksiz kılar, Açık / kapalı ilkesine bağlı kalmaya izin verir ve nihai ürünü bir değişiklik durumunda daha esnek hale getirir. Factory method sayesinde bu oyunu tasarlamamız çok daha kolaylamıştır. Benzer sınıfları birden fazla şekilde kullanmaktan kaçınılmıştır. [2]

Referanslar

[1] Caner, “ Factory Method Pattern Nedir Nasıl Kullanılır ”, URL:http://www.canertosuner.com/post/factory-method-pattern-nedir-nasil-kullanilir

[2] “Factory method pattern”, URL: https://en.wikipedia.org/wiki/Factory_method_pattern

--

--