1. program to an interface, not an implementation  2. identify the aspects of the application that vary
1. program to an interface, not an implementation  2. identify the aspects of the application that vary
-program to an interface and not to implementation -encapsulate variation; open to extension, close to modification -favor object composition over inheritance -delegate responsibilities