Why does Abstract Factory use abstract class instead of interface?

后端 未结 4 531
故里飘歌
故里飘歌 2021-01-12 02:37

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 questio

相关标签:
4条回答
  • 2021-01-12 03:15

    It's probably a typo in the book and the first "interface" was actually an abstract class.

    There's no such thing as an "abstract interface". An interface is by definition abstract.

    0 讨论(0)
  • 2021-01-12 03:17

    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.

    0 讨论(0)
  • 2021-01-12 03:21

    An interface is indeed the most elegant way to do this.

    An argument to use an abstract class: Sometimes it can be useful to use an abstract class when the class maintains a state and some parts are already known.

    However it is safer to first use an interface and then optionally implement an abstract class who introduces such state. Since C# only allows single inheritance one could run into trouble when a ConcreteFactory should inherit from different classes.

    0 讨论(0)
  • 2021-01-12 03:31

    "Abstract" in "abstract factory" has nothing to do with "abstract" in abstract class. Abstract factory is "base" for concrete factory, but design pattern itself does not enforce any particular implementation. Abstract factory can be abstract or even concrete class, interface or some form of duck typed object depending on language you use.

    Indeed in C# interface is very reasonable way to specify Abstract Factory.

    0 讨论(0)
提交回复
热议问题