Thinking about the Bridge (Design Pattern), we may have a situation where there are dependencies between different facets.

Benefits:

  • Allows polymorphic creation of objects
  • Nicely encapsulates object creation - client depends on abstraction not implementation

Disadvantages:

  • Creation is bound to a containing class which contains other functionality
  • Switching creation independently of other functionality is impossible