Паттерн проектирования «Фабричный метод» (Factory Method) позволяет создавать объекты без указания конкретного класса создаваемого объекта. Это делается путем делегирования создания объекта одному из подклассов.
Реализация на языке C
Пример на C#:
- Интерфейс продукта:
public interface IProduct
{
void DoWork();
}
- Конкретные продукты:
public class ConcreteProductA : IProduct
{
public void DoWork()
{
Console.WriteLine("ConcreteProductA is working.");
}
}
public class ConcreteProductB : IProduct
{
public void DoWork()
{
Console.WriteLine("ConcreteProductB is working.");
}
}
- Создатель (Creator):
public abstract class Creator
{
public abstract IProduct FactoryMethod();
public void AnOperation()
{
IProduct product = FactoryMethod();
product.DoWork();
}
}
- Конкретные создатели:
public class ConcreteCreatorA : Creator
{
public override IProduct FactoryMethod()
{
return new ConcreteProductA();
}
}
public class ConcreteCreatorB : Creator
{
public override IProduct FactoryMethod()
{
return new ConcreteProductB();
}
}
- Использование:
public class Client
{
public static void Main(string[] args)
{
Creator creatorA = new ConcreteCreatorA();
creatorA.AnOperation();
Creator creatorB = new ConcreteCreatorB();
creatorB.AnOperation();
}
}
Объяснение:
- Интерфейс продукта (
IProduct
): Определяет интерфейс, который все конкретные продукты должны реализовывать. - Конкретные продукты (
ConcreteProductA
иConcreteProductB
): Реализуют интерфейс продукта. - Создатель (
Creator
): Абстрактный класс, который объявляет фабричный метод. Он также содержит методAnOperation
, который вызывает фабричный метод и работает с возвращенным продуктом. - Конкретные создатели (
ConcreteCreatorA
иConcreteCreatorB
): Реализуют фабричный метод для создания конкретных продуктов.
Этот паттерн позволяет легко добавлять новые типы продуктов без изменения существующего кода создателя, что улучшает расширяемость и поддерживаемость кода.