Factory Method Design Pattern

ismail kaşan
2 min readAug 23, 2019

--

Factory Method Design Pattern

Arkadaşlar Merhaba, bu yazımızda Factory Method Design Pattern ile ilgili bir örnek proje gerçekleştireceğiz.Bu tasarım kalıbıyla yapılmak istenen amaç, oluşturmak istediğimiz sınıfın kendisinden bir örnek istemek yerine Factory Metod patterni sayesinde tek bir instance üzerinden gerekli nesnenin üretilmesini sağlamaktır.

Uygulamamızda belirli adımlarda farklı tiplerde nesnelere ihtiyacımız olabilir. Bu nesneleri if — else veyahut switch yapıları aracılığıyla, duruma göre oluşturabiliriz. Tabi bunu her seferinde yapmanın zaman ve kod açısından çok tasarruflu olduğunu düşünülemez. İşte böyle durumlarda Factory Method paternini kullanabiliriz.

Bir başka deyişle, elinizin altındaki birden çok ilişkisel sınıftan nesne üreteceksek, söz gelimi her defasında ilgili nesneye özel üretme gramerini uygulamanıza gerek kalmayacak, tek bir sınıf üzerinden oluşturacağımız nesne talebiyle istediğiniz nesneyi elde edebileceğiz.

Şimdilik şöyle bir örnek üzerinden gidelim.Bir galeri düşünelim Bmw,Opel,Mercedes markalarını satıyor. Hadi projemizi hemen dizayn edelim ve Factory Method paterni ile istediğimiz arabayı üretelim.

Abstract Class İle Factory Method Design Pattern

Kurguladığım senaryoya göre tüm arabalari türeteceğim abstract class’ı dizayn edelim.

Şimdide arabalarımızı tasarlayalım ve oluşturmuş olduğumuz “ ArabaMarkasi ” abstract class’ından bu ürünleri türetelim.

Araba ürünlerimi Abstract class olan ArabaMarkasi sınıfından türeterek sınıflarımı oluşturdum. Artık bu sınıflardan nesne üretecek olan Creater sınıfını oluşturalım ve içerisine Factory işlemini yapacak metodumuzu tanımlayalım.

Ama öncelikle bu method hangi tipten nesne üreteceğini nerden bilecek? Bu durumu Enumaration ile halledebiliriz. Aşağıdaki Enumaration FactoryMethod’un hangi tipte nesne üreteceğine yardımcı olacaktır.

Bu işlemden sonra FactoryMethod’u tam olarak inşa edebiliriz.

Gördüğünüz gibi FactoryMethod parametresinde belirttiğimiz tipe göre istediğimiz nesneyi oluşturacak bir işleyişe sahip oldu. Burada dikkat etmeniz gereken husus, her bir araba ürününün “ArabaMarkasi” abstract class’ından kalıtım almasından dolayı çok biçimlilik kullanılarak “ArabaMarkasi” referansında tutulabilmekte ve geriye döndürülebilmektedir. Sıra geldi istediğimiz nesneyi üretmeye…

Ekran görüntüsü aşağıdaki gibi oluyor.

Tabi ilişkisel sınıflar ve algoritmada ki ihtiyaca göre üretilmesi gereken sınıflar üzerinde bu tasarım desenini uygulamak en doğrusudur.

Eğer Factory Method tasarım desenenini interface kullanarak uygulamak istiyorsanız, “ArabaMarkasi” isimli abstract sınıfını interface’e çevirmeniz yeterlidir. Tabi bu çevrim sırasında interface kurallarını dikkate almalı ve arabalari interfaceden türetirken yapılacak implementte override komutu olmadan uygulama gerçekleştirilmelidir. Bununla ilgili yazıda kod parçaaı koymayacağım ama github taki projede o kodlar mevcut.Umarım faydalı olmuştur iyi çalışmalar.

Kaynak Kodu

Yararlandığım Kaynaklar
https://www.gencayyildiz.com/blog/c-factory-method-design-patternfactory-method-tasarim-deseni/ http://www.canertosuner.com/post/factory-method-pattern-nedir-nasil-kullanilir

--

--

ismail kaşan
ismail kaşan

Written by ismail kaşan

I am a full stack developer since 2016.

No responses yet