Middle
Soyut fabrika deseninin uygulanması nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Soyut Fabrika deseni, birbiriyle ilişkili veya bağımlı nesil aileleri, onların somut sınıflarını belirtmeden oluşturmaya olanak tanıyan bir arayüz sağlar.
Ana bileşenler:
- Soyut Fabrika: Soyut ürünlerin oluşturulması işlemleri için arayüzü bildirir.
- Somut Fabrika: Belirli bir ürün ailesi için soyut ürün oluşturma işlemlerini uygular.
- Soyut Ürün: Bir ürün tipi için arayüz bildirir.
- Somut Ürün: Belirli bir ürün için soyut ürün arayüzünü uygular.
- İstemci: Soyut Fabrika ve Soyut Ürün arayüzlerini kullanır, ancak Somut Fabrika ve Somut Ürün hakkında bilgi sahibi değildir.
Uygulama:
- Her ürün tipi için oluşturma metodları olan soyut bir fabrika tanımlanır.
- Her ürün ailesi için, ilgili soyut fabrika metodlarını uygulayan ve karşılık gelen somut ürünleri oluşturan somut bir fabrika oluşturulur.
- Her ürün tipi için soyut ürün arayüzü tanımlanır.
- Her somut ürün için, ilgili arayüzü uygulayan bir sınıf oluşturulur.
- İstemci, soyut fabrika nesnesi alır ve ürünleri oluşturmak için metodlarını çağırır, sadece ürün arayüzleriyle çalışır.
// Soyut Fabrika
public interface IAbstractFactory
{
IAbstractProductA CreateProductA();
IAbstractProductB CreateProductB();
}
// Somut Fabrika 1
public class ConcreteFactory1 : IAbstractFactory
{
public IAbstractProductA CreateProductA()
{
return new ConcreteProductA1();
}
public IAbstractProductB CreateProductB()
{
return new ConcreteProductB1();
}
}
// Somut Fabrika 2
public class ConcreteFactory2 : IAbstractFactory
{
public IAbstractProductA CreateProductA()
{
return new ConcreteProductA2();
}
public IAbstractProductB CreateProductB()
{
return new ConcreteProductB2();
}
}
// Soyut Ürün A
public interface IAbstractProductA
{
string UsefulFunctionA();
}
// Somut Ürün A1
public class ConcreteProductA1 : IAbstractProductA
{
public string UsefulFunctionA()
{
return "A1 ürününün sonucu.";
}
}
// Somut Ürün A2
public class ConcreteProductA2 : IAbstractProductA
{
public string UsefulFunctionA()
{
return "A2 ürününün sonucu.";
}
}
// Soyut Ürün B
public interface IAbstractProductB
{
string UsefulFunctionB();
string AnotherUsefulFunctionB(IAbstractProductA collaborator);
}
// Somut Ürün B1
public class ConcreteProductB1 : IAbstractProductB
{
public string UsefulFunctionB()
{
return "B1 ürününün sonucu.";
}
// B1 ürünü sadece aynı türdeki A ürünleriyle çalışabilir
public string AnotherUsefulFunctionB(IAbstractProductA collaborator)
{
var result = collaborator.UsefulFunctionA();
return $"B1, ({result}) ile işbirliği yapıyor";
}
}
// Somut Ürün B2
public class ConcreteProductB2 : IAbstractProductB
{
public string UsefulFunctionB()
{
return "B2 ürününün sonucu.";
}
// B2 ürünü sadece aynı türdeki A ürünleriyle çalışabilir
public string AnotherUsefulFunctionB(IAbstractProductA collaborator)
{
var result = collaborator.UsefulFunctionA();
return $"B2, ({result}) ile işbirliği yapıyor";
}
}
// İstemci kodu
public class Client
{
public void Main()
{
// İstemci kodu soyut fabrika ile çalışır
Console.WriteLine("İstemci: İlk fabrika türü ile istemci kodunu test ediyor:");
ClientMethod(new ConcreteFactory1());
Console.WriteLine();
Console.WriteLine("İstemci: Aynı istemci kodunu ikinci fabrika türü ile test ediyor:");
ClientMethod(new ConcreteFactory2());
}
public void ClientMethod(IAbstractFactory factory)
{
var productA = factory.CreateProductA();
var productB = factory.CreateProductB();
Console.WriteLine(productB.UsefulFunctionB());
Console.WriteLine(productB.AnotherUsefulFunctionB(productA));
}
}