Abstract Factory Design Pattern Nedir? Ne Zaman ve Nasıl Kullanılır?

Hakan Topuz
2 min readDec 9, 2018

--

Merhabalar,

Design pattern’lerden fazlaca kullanışlı bir başka pattern’e değineceğim bu yazıda.

Abstract Factory Design Pattern Nedir?

Abstract factory design pattern’i anlatırken ister istemez Factory design pattern’ine de değinmiş olacağız.

Factory design pattern’de tek bir ürün ailesine ait tek bir arayüz mevcutken,abstract factory’de farklı ürün aileleri için farklı arayüzler mevcuttur.

Fabrika olarak düşünürsek, Factory DP sadece tek bir ürünün üretildiği fabrika, Abstract Factory DP ise farklı farklı ürünlerin üretildiği fabrika olarak düşünebiliriz.

Abstract Factory Ne Zaman Kullanılır?

Birden fazla ürün ailesi ile çalışmak durumunda kaldığımızda , ürün ailesi ile istemci tarafını soyutlamak için kullanılır.

Ürün ailelerinin oluşumunu istemci tarafından ayırarak, karar verme koşulu olmadan, esnek ve geliştirilebilir bir yapı kurmamızı sağlar.

O zaman bir örnek yaparak Abstract Factory’nin kullanımına bakalım:

Öncelikle interface lerimizi oluşturalım.

Görüldüğü üzere futbol üzerinden gideceğim.(En azından kendi adıma bu işi daha zevkli hale getirmek için)

Şimdi IFootballFactory interface ini gerçekleyen ülkeleri yani ligleri oluşturalım.

Görüldüğü üzere her ligden 1 tane takım oluşturuyorum.

ITeam interface ini gerçekleyen takımları da oluşturalım.İçerisinde takıma ait renklerin string olarak döndüğü bir metot var.

Daha sonra IPlayer interface’ini gerçekleyen Player class larımızı oluşturalım.

Altyapıyı bu şekilde oluşturduk diyebilirim.Şimdi client class ımızı oluşturalım.Adına FootballWorld diyeceğim.

Görüldüğü üzere client class ının ne herhangi bir ülkeyle ne de herhangi bir takımla bağlantısı mevcut.Tamamen soyutlanmış durumda.Ben hangi ülkeyi kullanmak istersem o ülkenin takımına ait rengi ve futbolcuyu bana dönecektir.

Kullanımına gelecek olursam console application üzerinde aşağıdaki gibi bir kullanım söz konusu.

IFootballFactory tipinde 3 tane ligi de oluşturdum.FootballWorld class ına hangi ülkeyi gönderirsem, konsola o ülkenin takımının renklerini yazacaktır.

Yukarıdaki kod çalıştığında çıktı olarak bana LaLiga takımlarından Real Madrid’in renklerini ve ligin en golcü oyuncusunu gösterecektir.

Görüldüğü üzere birden fazla lig mevcut ve ben bunları client tarafından tamamen koparmış durumdayım.Client tarafı arkada ne olduğunu bilmez, sadece ilgili metotları çağırır.

IFootballFactory interface ini gerçekleyen hangi class olursa olsun, FootballWorld isimli client class ıma gönderildiğinde başarılı bir şekilde çalışacaktır.Bu sayede gevşek bağlılığı(loose coupling) da sağlamış oluyoruz.

Factory Desing Pattern’den farklı olarak içerisinde Team ve Player nesneleri olmak üzere iki farklı nesne kullanıyoruz.Factory DP’de tek bir nesne üzerinden işlemler yürür, örneğin sadece team nesnesi gibi.

Abstract Factory DP ye değinirken bi yandan da Factory DP değinmiş olduk.İhtiyaç dahilinde kullanılabilecek, nesneleri birbirinden soyutlama ve Dependency Injection adına güzel bir design pattern’i de görmüş olduk.

Umarım faydalı bir yazı olmuştur.

Herkese mutlu kodlamalar.

--

--