Design Patterns: Elements of Reusable Object-Oriented Software (Hardcover)
Design Patterns is a modern classic in the literature of object-oriented development, offering timeless and elegant solutions to common problems in software design. It describes patterns for managing object creation, composing objects into larger structures, and coordinating control flow between objects. The book provides numerous examples where using composition rather than inheritance can improve the reusability and flexibility of code. Note, though, that it’s not a tutorial but a catalog that you can use to find an object-oriented design pattern that’s appropriate for the needs of your particular application–a selection for virtuoso programmers who appreciate (or require) consistent, well-engineered object-oriented designs.

This book is the bible.  If you’re a developer and dont have this book buy it now!  Ina  startup world, where abstraction, scale and writing re-usable code is paramount.  This book will give you the tools you need to do it.