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();
 }
public class AngularDeveloper : IFeDeveloper { }
 public class DotnetDeveloper : IBeDeveloper { }
public class ReactDeveloper : IFeDeveloper { }
 public class GoDeveloper : IBeDeveloper { }
public class StackOneAbstractFactory : IAbstractFactory
 {
     public IBeDeveloper CreateBeDeveloper()
     {
         return new DotnetDeveloper();
     }

     public IFeDeveloper CreateFeDeveloper()
     {
         return new AngularDeveloper();
     }
 }
public class StackTwoAbstractFactory : IAbstractFactory
 {
     public IBeDeveloper CreateBeDeveloper()
     {
         return new GoDeveloper();
     }

     public IFeDeveloper CreateFeDeveloper()
     {
         return new ReactDeveloper();
     }
 }
public class Client
 {
     private readonly IAbstractFactory _abstractFactory;
     public Client(IAbstractFactory abstractFactory)
     {
         _abstractFactory = abstractFactory;
     }
     public void Run()
     {
         var feDeveloper = _abstractFactory.CreateFeDeveloper();
         var beDeveloper = _abstractFactory.CreateBeDeveloper();
     }
 }
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();
     }
 }

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.