It may seem as if this is question is a dupe, but please bear with me - I promise I've read the related posts (and the GOF book).
After everything I've read, I still don't have it clear when to use an Abstract Factory, a Factory Method, or a Builder. I believe it will finally sink in after I see a simple example of a problem which is best approached by, say, a builder and it would be clearly silly to use, say, an abstract factory.
Can you provide a simple example where you would clearly use one pattern and not the others?
I understand it may boil down to a matter of opinion if the example is too simple, but I'm hopeful that if anybody can, that person is in SO.
Thanks.
A builder helps you construct a complex object. An example is the StringBuilder
class (Java, C#), which builds the final string piece by piece. A better example is the UriComponentsBuilder in Spring, which helps you build a URI.
A factory method gives you a complete object in one shot (as opposed to the builder). A base class defines a single abstract method that returns an interface (or super class) reference, and defers the concrete creation of the object to subclasses.
An abstract factory is an interface (or abstract class) to create many different related objects. A good example (in .NET) is the DbProviderFactory
class, that serves to create related objects (connections, commands, ...) to a given database provider (oracle, sql server, ...), depending on its concrete implementation.