Middle
Абстракттуу фабрика үлгүсүнүн ишке ашырылышы эмнеде?
sobes.tech AI
AIден жооп
Абстракттуу фабрика интерфейсин өз ара байланышкан же өз ара көзкаранды объекттердин үй-бүлөлөрүн түзүү үчүн камсыз кылат, алардын конкреттүү класстарын көрсөтпөстөн.
Негизги компоненттер:
- Abstract Factory: Абстракттык продукттарды түзүү операциялары үчүн интерфейсди жарыялайт.
- Concrete Factory: Конкреттүү продукттар үй-бүлөсү үчүн абстракттык фабрика операцияларын ишке ашырат.
- Abstract Product: Продукттун түрү үчүн интерфейсди жарыялайт.
- Concrete Product: Конкреттүү продукт үчүн Abstract Product интерфейсин ишке ашырат.
- Client: Abstract Factory жана Abstract Product интерфейстерин колдонуп, бирок Concrete Factory жана Concrete Product жөнүндө билбейт.
Ишке ашыруу:
- Ар бир продукт түрү үчүн түзүүчү методдор менен абстракттык фабрика аныкталат.
- Ар бир продукт үй-бүлөсү үчүн, тиешелүү конкреттүү продукттарды түзүүчү методдорду ишке ашыруучү конкреттүү фабрика түзүлөт.
- Ар бир продукт түрү үчүн абстракттык продукт интерфейси аныкталат.
- Ар бир конкреттүү продукт үчүн, тиешелүү продукт интерфейсин ишке ашыруучү класс түзүлөт.
- Клиенттик бөлүм абстракттык фабрика объектисин алат жана анын методдорун колдонуп продукттарды түзөт, тек гана продукт интерфейстер менен иштейт.
// Абстракттык фабрика
public interface IAbstractFactory
{
IAbstractProductA CreateProductA();
IAbstractProductB CreateProductB();
}
// Конкреттүү фабрика 1
public class ConcreteFactory1 : IAbstractFactory
{
public IAbstractProductA CreateProductA()
{
return new ConcreteProductA1();
}
public IAbstractProductB CreateProductB()
{
return new ConcreteProductB1();
}
}
// Конкреттүү фабрика 2
public class ConcreteFactory2 : IAbstractFactory
{
public IAbstractProductA CreateProductA()
{
return new ConcreteProductA2();
}
public IAbstractProductB CreateProductB()
{
return new ConcreteProductB2();
}
}
// Абстракттык продукт A
public interface IAbstractProductA
{
string UsefulFunctionA();
}
// Конкреттүү продукт A1
public class ConcreteProductA1 : IAbstractProductA
{
public string UsefulFunctionA()
{
return "The result of the product A1.";
}
}
// Конкреттүү продукт A2
public class ConcreteProductA2 : IAbstractProductA
{
public string UsefulFunctionA()
{
return "The result of the product A2.";
}
}
// Абстракттык продукт B
public interface IAbstractProductB
{
string UsefulFunctionB();
string AnotherUsefulFunctionB(IAbstractProductA collaborator);
}
// Конкреттүү продукт B1
public class ConcreteProductB1 : IAbstractProductB
{
public string UsefulFunctionB()
{
return "The result of the product B1.";
}
// B1 продукту гана ошол эле варианттагы A продукттар менен иштей алат
public string AnotherUsefulFunctionB(IAbstractProductA collaborator)
{
var result = collaborator.UsefulFunctionA();
return $"The result of the B1 collaborating with the ({result})";
}
}
// Конкреттүү продукт B2
public class ConcreteProductB2 : IAbstractProductB
{
public string UsefulFunctionB()
{
return "The result of the product B2.";
}
// B2 продукту гана ошол эле варианттагы A продукттар менен иштей алат
public string AnotherUsefulFunctionB(IAbstractProductA collaborator)
{
var result = collaborator.UsefulFunctionA();
return $"The result of the B2 collaborating with the ({result})";
}
}
// Клиенттик код
public class Client
{
public void Main()
{
// Клиенттик код абстракттык фабрика менен иштейт
Console.WriteLine("Client: Testing client code with the first factory type:");
ClientMethod(new ConcreteFactory1());
Console.WriteLine();
Console.WriteLine("Client: Testing the same client code with the second factory type:");
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));
}
}