Una función wrapper es muy simplemente una función que existe para llamar a otra función, con poco o ningún código adicional. El término es un paraguas para varios patrones de diseño «Gang of 4», dependiendo de la intención exacta:
* Puente – La envoltura existe simplemente para «ocultar» un método de otro código. Esto se hace a menudo en la arquitectura de n-capas para reforzar la «separación de preocupaciones»; es ampliamente aceptado que la lógica que muestra los datos al usuario no debería preocuparse de dónde vienen los datos, y del mismo modo el código que recupera los datos no debería preocuparse (al menos no demasiado) de cómo se muestran. Al poner el «puente», el consumidor del puente no tiene que cambiar si el método que está envolviendo lo hace (siempre y cuando no tenga que cambiar la firma del método puente).
* Adaptador – El envoltorio cambia la firma del método, y/o su clase contenedora, para que pueda ser utilizado donde se espera otra «interfaz». Este es un uso muy común para las envolturas.
* Compuesto – Las envolturas no tienen que envolver sólo otro método. Pueden tener el mismo aspecto que el método que envuelven, pero en realidad envuelven dos, tres o cuatro métodos con esa firma, «transmitiendo» una única llamada a un método a múltiples lugares del código.
* Proxy – Los wrappers se ven comúnmente en las capas de servicio. Se ven exactamente como el método en el código de otra máquina, pero cuando los llama, transforman la llamada en un mensaje de red que se envía a esa otra máquina para hacer realmente la llamada. El «wrapper» existe para hacer que el servicio sea más fácil y más intuitivo de usar, como si estuvieras ejecutando ese código localmente.