Soyut Fabrika (Abstract Factory) Tasarım Deseni

Veysel Güneş
Kodcular
Published in
3 min readFeb 13, 2020

--

Merhaba arkadaşlar uzun zamandır yazmayı düşündüğümün ancak bazı olaylar sebebiyle bir türlü kaleme alamadığım yazılım tasarım desenlerinde bir olan soyut fabrikadan bahsedeceğim ilk olarak soyut fabrikanın ne olduğundan bahsettik den sonra soyut fabrikanın ne zaman kullanmamız gerektiğini ve nerelerde kullanabileceğimizi, kullanırsak faydaları bize ne olacağında bahsedeceğim ve daha sonra detaylı bir örnek üzerinde tasarım desenimizin daha soyut bir hale getirmeye çalışacağız.

Soyut fabrika(Abstract Factory) Nedir ?

Soyut Fabrika tasarım deseni, creational tasarım desenlerinden biridir. Bu tasarım deseni birbiriyle alakalı veya bağımlı nesnelerin somut sınıflarını belirtmeden, yaratılması için gereken bir arayüz sağlar. Ayrıca bu desene fabrikaların fabrikası(factories of the factory) da denir.

Ne zaman Kullanılır?

Product’ları yaratan fabrika sınıfından somut nesne yaratma işlemini çıkarmak istiyorsak, bu tasarım desenini kullanmak gereklidir. Ayrıca temel fabrika deseninde bulunan if-else yapısından da kurtulmak istiyorsanız soyut fabrika tasarım desenini kullanabilirsiniz.

Nasıl Kullanılır?

Her bir Product alt sınıfları için bir fabrika sınıfı oluşturmak gereklidir. Bu oluşturulacak fabrika sınıfları ise türü interface veya abstract olan bir süper fabrika sınıfından türemelidir.

Faydaları Nedir?

1. Client sınıfına, bir abstract arayüz kullanmasını sağlayarak, gerçekte üretilecek ilişkili Product sınıflarını bilmeden veya önemsemeden oluşturulmasına olanak tanır.
2. if-else yapısından kurtararak daha anlaşılır kod yazmayı sağlar.

Gerekenler

Türü abstract, interface veya normal sınıf olan bir süper sınıf
En az bir tane alt sınıf
Bir tane süper abstract factory sınıfı
En az bir tane alt factory sınıfı
Bir tane Fabrika üretici sınıfı
Test sınıfı

Örneğimize geçelim

Örneğimizde Çok iyi bir yazılım şirketinde çalışan Ayşe haftasonu arkadaşlarıyla akşam yemeğine
gidecektir. Hazırlanmak için dolabını açtığı zaman yemek için giyecek bir kıyafetinin
olduğunu ancak bu kıyafete uygun bir çanta, ayakkabı ve mücevherinin olmadığını
farketmiştir. Seçeneklerini değerlendirdikten sonra üç farklı firmadan çanta, ayakkabı

ve mücevher bakmaya karar vermiştir. Bu fimalar Gucci, Chanel ve Hermes firmalarıdır. Ayşe çantayı alırken;

  • çantanın özelliklerine
    • ayakkabının fiyatına
    • mücevherin türüne bakmaktadır.
    • Gucci mağazasında ayakkabının fiyatı 1000 TL, çantanın türü timsah derisi ve
    mücevherin türü ise altındır.
    • Chanel mağazasında ayakakbının fiyatı 2575 TL, çantanın türü plastik ve
    mücevherin türü ise zümrüttür.
    • Hermes mağazasında ayakkabının fiyatı 750 TL, çantanın türü vidala ve mücevherin
    türü ise gümüştür.

ilk olarak kodlama kısmına geçmeden önce örneğimizin uml sınıf diyagramında kapsamlı bir şekilde gösterimini yapıyoruz.

Uml diyagramında yaptığımız bu şekilde çizimler bize kod yazarken daha rahat ve anlaşılır bir şekilde yazmamıza olanak sağlayacakır.

Uml Sınıf Diyagramı

İlk olarak Ifabrika tanımlı bir interface tanımladık.

Daha sonra istenilen tüm ürünler için bir interface tanımladık bunlar; ICanta, IAyakkabı ve IMucevher şeklinde 3 adet interface tanımlaması yapıldı.

interFace tanımlaması

Diğer bir aşamada ise İnterfacelerinin içerisinde yeni bir nesne türetmesi yaparak gerekli bilgileri türettiğimiz nesne üzerinden yaptık

Ve bu kısımda oluşturulan nesnelerin hangi değerleri döndüreceğini ve içeriğin ne olacağını oluşturduğumuz bölüm

Üretilen interfacelerin neler üreteceği kısım

Son olarak da yaptığımız bu kod parçaları bir test kod parçası yazarak test edelim

Test kısmı

Evet arkadaşlar bu tasarım deseninin de burada sona erdi, sabırla okuduğunuz için teşekkür ederim umarım faydalı bir içerik olmuştur

Sabır vazgeçmek değil, umudu yarına ertelemektir.

hiç bir zaman pes etmeyerek sürekli olarak kendimizi geliştirmek dilekleriyle

--

--

Veysel Güneş
Kodcular

Studying software engineering at firat university, Blogger Öğrendiklerini yazmaktan ve ortaya bir ürün koymaktan mutlu olan http://veyselgunes.site/