Search code examples
c#oopdesign-patternsabstract-factory

Why does Abstract Factory use abstract class instead of interface?


I am learning about design patterns and the first example in the book is about Abstract Factory. I have built the exercise in VS and all looks good, but there is one question that I wonder about.

In the book the factory class is implemented like this:

public abstract class AbstractVehicleFactory
{
    public abstract IBody CreateBody();
    public abstract IChassis CreateChassis();
    public abstract IGlassware CreateGlassware();
}

After completing the exercise I have noted that the above class can be replaced with this code:

public interface IAbstractVehicleFactory
{
      IBody CreateBody();
      IChassis CreateChassis();
      IGlassware CreateGlassware();
}

Of course both examples function exactly the same, but I wonder what is the reason for using an abstract class and not an interface?


Solution

  • An abstract class can, with care, be extended in a non-breaking manner; all changes to an interface are breaking changes.

    Update:
    In contrast, an interface can be an in or out type-parameter and an abstract class cannot. Sometimes one or the other is more appropriate for a given design, and sometimes it is a toss-up.