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.