<Li> Abstract factory pattern, which provides an interface for creating related or dependent objects without specifying the objects' concrete classes . </Li> <Li> Builder pattern, which separates the construction of a complex object from its representation so that the same construction process can create different representations . </Li> <Li> Factory method pattern, which allows a class to defer instantiation to subclasses . </Li> <Li> Prototype pattern, which specifies the kind of object to create using a prototypical instance, and creates new objects by cloning this prototype . </Li>

When would you use the abstract factory design pattern (choose all that apply)