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.

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.