Design-Patterns Design principle Encapsulate what varies Program to an interface not to an implementation. Favor composition over inheritance. Strive for loosely coupled designs between objects that interact.