•Applicability
–When a
system should be independent of how its products are created, composed, and
represented
–When a
system should be configured as one of a multiple set of possibilities
–When a
family of related classes should be used together and you need to enforce this
constraint
–When
you want to reveal interfaces to, but not the implementations of, classes