En la programación orientada a objetos, se usan diferentes patrones estructurales que funcionan siempre de la misma manera, sin importar el lenguaje de programación que se utilice. Los patrones de diseño, adaptador y decorador pertenecen a la categoría de patrones estructurales y se consideran wrappers.
Un adaptador envuelve a dos interfaces incompatibles entre diferentes clases. Al traducir una interfaz a la otra, las clases ya pueden volver a comunicarse entre sí. Esto es muy importante cuando queremos seguir usando clases o bibliotecas enteras de clases en proyectos nuevos. Estas bibliotecas usan interfaces estandarizadas y unívocas que no deben modificarse ya que deben ser compatibles con un gran número de programas. El wrapper, el adaptador en este caso, es el eslabón intermedio determinante para la comunicación.
Un decorador permite ampliar una clase con funciones adicionales sin modificarla. Para el objeto de programa consultante, el decorador presenta la misma interfaz que la clase original. Así, el objeto que lo consulta no requiere modificación alguna. En su función de wrapper, el decorador transmite las consultas a la clase. Las funciones nuevas, no incluidas en la clase, son procesadas directamente por el decorador. A continuación, este devuelve los resultados de manera que el objeto consultante los perciba como resultados de la clase decorada.