Factory Design Pattern

Hasan Kadir Demircan
2 min readMar 22, 2020

--

Nasıl Ortaya Çıkmış?

Örneğimizi anlaşılır olması açısından arabalar üzerinden vereceğim.

Galerici olduğunuzu düşünün, sattığınız 4 araba markası var diyelim.

Bir süre sonra çok popüler bir galerici olduğumuzu varsayalım.

Böylelikle araba marka çeşidimizi arttırırız.

Böyle bir durumda yeni bir sınıf eklemek çözüm olarak sunulabilir.

Fakat kodlarımız mevcut sınıflara bağlı olduğu için bu durum çok basit değildir.

Beraberinde yeni sınıflar eklemeye başladığımızda if-else blokları new anahtar kelimeleri çoğalacaktır.

Nedir Bunun Çözümü?

Factory Design Pattern tam burada devreye girmektedir.

Porsche porsche = new Porsche();

yapısı gibi new operatorleri kullanmak yerine fabrika örüntüsü nesneleri döndürmektedir.

Küçük bir örnekle göz atalım.

Yukarıda açıkladığımız gibi new ile ürettiğimiz class’ların ortak buluştuğu bir nokta olmalıydı.

Burada ortak noktalarını interface üzerinde tanımlayacağız.

Car.java adında bir interface oluşturdum ve iki method tanımladım.

Car.java

Şimdi ise Car interface’ini implement edecek iki tane class oluşturalım.

Porsche.java
Bmw.java

Benzerlik durumlarını gözeterek iki tane class oluşturduk.

Normalde Main sınıfımızda her ikisi için new anahtar kelimesini kullanarak nesne türetecektik.

Fakat bu durumdan kurtaracak factory sınıfımızı oluşturalım.

CarFactory.java

Yukarıdaki factory sınıfımızı açıklayacak olursak,

Static bir methodumuz var ve bu methoda oluşturmak istediğimiz class’ı parametre olarak verdiğimizde kendisi nesnesini oluşturup bize geri dönecektir.

Main.java

Yukarıda son olarak Main sınıfımızı yazdık.

Burada kullanmak istediğimiz class’ın nesnesini CarFactory class’ımız aracılığıyla üretip daha sonra gerekli methodlarını kullanabilmekteyiz.

Sözel olarak aklıma gelmişken eklemek istediğim bir başka örnek ise,

Projelerimizde birden fazla authenticate işlemleri kullanmak durumunda kalabiliriz.

Örnek olarak ‘a’ durumunda LDAP doğrulaması yapsın fakat ‘b’ durumunda jwt doğrulaması yapsın gibi bir durum önümüze gelebilir.

Bu durumda iki tane authenticate sınıfımız olacak bunları if-else bloğuyla veya new ile ayrı ayrı nesnelerini üretmek yerine interface kullanarak ve araya factory sınıfımızı ekleyerek bu işlemi daha okunaklı ve yapısal biçimde gerçekleştirebiliriz.

Github : Factory Design Pattern

--

--

Hasan Kadir Demircan
Hasan Kadir Demircan

Responses (1)