DEV Community

MustafaSamedYeyin
MustafaSamedYeyin

Posted on

🔨 #Soyut-Fabrika (Abstract Factory)

Gerçek dünya seneryosu:

Son zamanlarda iş ilanlarında belli stack'leri yoğun olarak görmekteyiz örneğin dotnet+angular veya react+go gibi bu sebeple dotnet ve angular bir stack veya object family'si olarak görebiliriz aynı zamanda react ve go yu bir stack veya object family olarak görebiliriz.

Basitçe :

Abstract Factory : Fabrika metotlardan oluşan bir class'ıdır.

Abstract Factory : Birbirleriye yakın ilşikisi olan nesneleri yaratım problemini bir araya toplar, birbirleriyle ilişkisi olmayan yapılar aynı abstract factory'ye koyulmamalıdır!!!

Abstract Factory : tekil veya birliktelik ifade edennesneleri yaratılma işlemini alt-class'lara yükler.

Yazılım Örneğin?

 public interface IBeDeveloper { } public interface IFeDeveloper { } public interface IAbstractFactory { IFeDeveloper CreateFeDeveloper(); IBeDeveloper CreateBeDeveloper(); } 
Enter fullscreen mode Exit fullscreen mode
 public class AngularDeveloper : IFeDeveloper { } public class DotnetDeveloper : IBeDeveloper { } 
Enter fullscreen mode Exit fullscreen mode
 public class ReactDeveloper : IFeDeveloper { } public class GoDeveloper : IBeDeveloper { } 
Enter fullscreen mode Exit fullscreen mode
 public class StackOneAbstractFactory : IAbstractFactory { public IBeDeveloper CreateBeDeveloper() { return new DotnetDeveloper(); } public IFeDeveloper CreateFeDeveloper() { return new AngularDeveloper(); } } 
Enter fullscreen mode Exit fullscreen mode
 public class StackTwoAbstractFactory : IAbstractFactory { public IBeDeveloper CreateBeDeveloper() { return new GoDeveloper(); } public IFeDeveloper CreateFeDeveloper() { return new ReactDeveloper(); } } 
Enter fullscreen mode Exit fullscreen mode
 public class Client { private readonly IAbstractFactory _abstractFactory; public Client(IAbstractFactory abstractFactory) { _abstractFactory = abstractFactory; } public void Run() { var feDeveloper = _abstractFactory.CreateFeDeveloper(); var beDeveloper = _abstractFactory.CreateBeDeveloper(); } } 
Enter fullscreen mode Exit fullscreen mode
 public class Program { static void Main(string[] args) { IAbstractFactory factory = new StackOneAbstractFactory(); var client = new Client(factory); client.Run(); factory = new StackTwoAbstractFactory(); client = new Client(factory); client.Run(); } } 
Enter fullscreen mode Exit fullscreen mode

Abstract factory birbirlye ilşkili olan nesnelerin yaratımını kapsüller,böylece hem karmaşa önlenir hem de daha temiz bir kod yapısına geçilebilir.

Ne zaman kullanılmalı ?
İlişkili nesnelerin veya bir nesne ailesinin olduğu yerde abstract factory kullanılabilir. Örneğimiz nesne ailesi stack'lerdir.

Top comments (0)