Here are a few design principle to note from the book:
Identify the aspects of your application that vary and seperate them from what stays the same. Take what varies and "encapsulate" it so it wont affect the rest of your code. Program to an Interface and not an implementation. Favor composotion over inheritance.
Stategy Pattern (Duck)