Ils permettent de rendre un système indépendant de la façon dont ses objets ont été créés, combinés et concrétisés.
Ils encapsulent la connaissance des classes concrètes que le système utilise, de sorte que tout ce que le système connaît de ces objets, est leurs interfaces, telles que définies par des classes abstraites.