Skip to content

Factory Method

Context: Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.

public interface IProduct
{
void Operation();
}
public class ConcreteProductA : IProduct
{
public void Operation() => Console.WriteLine("Product A");
}
public abstract class Creator
{
public abstract IProduct FactoryMethod();
}
public class ConcreteCreatorA : Creator
{
public override IProduct FactoryMethod() => new ConcreteProductA();
}
// Usage
Creator creator = new ConcreteCreatorA();
IProduct product = creator.FactoryMethod();
product.Operation();

Logging frameworks: Different loggers (file, database, cloud) are created by corresponding factory methods. The application code only knows the ILogger interface; the concrete logger is decided by configuration or environment.

Example: In ASP.NET Core, ILoggerFactory uses factory method pattern to create logger instances for different categories. The CreateLogger method is a factory method that returns an ILogger for a given category name.