El término 'envoltorio' se usa mucho. Generalmente se usa para describir una clase que contiene una instancia de otra clase, pero que no expone directamente esa instancia. El propósito principal del contenedor es proporcionar una forma 'diferente' de usar el objeto empaquetado (quizás el contenedor proporcione una interfaz más simple o agregue alguna funcionalidad).
La palabra "envoltorio" también se puede utilizar al describir patrones de diseño clásicos.
Envolver un objeto para proporcionarle una interfaz simplificada a menudo se describe como el patrón 'Fachada'. La envoltura es la fachada.
A veces puede tener una clase que se adapte a una interfaz específica, pero no puede cambiar el código para que se ajuste a esa interfaz. Puede crear un contenedor para esa clase que implementa la interfaz, pero que dirige la mayoría de las llamadas al objeto empaquetado. Este es el patrón 'Adaptador'. La envoltura es el adaptador.
La instancia que describe, donde tiene dos clases que pueden hacer la clasificación de matrices usando diferentes algoritmos suena como el patrón 'Estrategia', donde proporciona una forma de realizar una operación en algún objeto, pero el algoritmo utilizado para esa operación puede ser diferente dependiendo sobre la estructura de ese objeto.
Por ejemplo, uno de sus algoritmos de ordenación puede ser excelente para matrices de longitud inferior a 100, pero el rendimiento podría ser un problema para él. El otro algoritmo podría ser bueno para matrices más grandes. Puede crear un 'contenedor' para los dos algoritmos que admita la operación de ordenación, pero decide qué algoritmo utilizar en función de la longitud de la matriz.
La gran mayoría de envoltorios existen para ocultar algún tipo de complejidad.
Explicación simple por analogía: ¿Qué es envoltura?
Código no utilizado para explicar.
Ejemplo 1: un Ipad "envuelve" un Iphone
¿Qué hace el ipad que no hace el iphone?
¿No son básicamente lo mismo, excepto que uno tiene una pantalla más grande?
El Ipad "envuelve" el iPhone: lo que significa que usted tiene todos los beneficios del iPhone DENTRO del propio iPad, Y tiene los beneficios de una pantalla más grande, etc. Pero fundamentalmente, dentro del iPad, se encuentra un Iphone.
Entonces, ¿qué es diferente? Lo único que es diferente es el exterior: tienes una pantalla más grande y quizás no puedas hacer llamadas telefónicas en el Ipad.
Es literalmente lo mismo con los "objetos".
............. el interior tiene todas las cosas buenas que son iguales, pero un exterior diferente. Un envoltorio diferente.
"Los envoltorios pueden exponer características diferentes a las del objeto subyacente" ... está bien, pero ¿qué significa esto?
A veces, la envoltura puede limitar las cosas a las que puede acceder dentro. Por ejemplo, el ipad puede limitar su capacidad para realizar llamadas telefónicas, aunque el Iphone enterrado en él tiene esa capacidad.
Ejemplo 2: automóvil automático que actúa como envoltorio de un automóvil manual
Piense en un automóvil automático y un automóvil manual. Detrás de escena, en un automóvil automático, hay algún mecanismo de ingeniería que cambia automáticamente las marchas por usted, pero fundamentalmente, debajo de la superficie, el automóvil sigue siendo un automóvil manual. En otras palabras, las características automáticas del automóvil "envuelven" la funcionalidad manual del automóvil. Si desea cambiar manualmente las marchas usted mismo en un automóvil automático, simplemente no puede hacerlo. La capacidad de cambiar de marcha "no está expuesta" en el automóvil automático. Pero está expuesto en un automóvil manual. De acuerdo, la analogía es un poco tensa, pero espero que veas a qué me refiero.
Pero, ¿cuál es el propósito de una envoltura?
Escribirías una clase de envoltura si quisieras simplificar las cosas. Crearía un 'contenedor' fácil de usar y dejaría todos los bits complicados dentro del contenedor, asegurándose de que esos bits complicados no queden 'expuestos'.
Por ejemplo, podría tener un contenedor .net, que debajo, realiza llamadas COM. Si no tuviera un contenedor, se vería obligado a realizar esas llamadas COM usted mismo. Afortunadamente, con la envoltura, solo haría las llamadas al código de envoltura .net, que a su vez haría esas llamadas COM. Y eso debería simplificar las cosas para usted.
fuente
Es solo que escribe un código fácil de usar para ocultar las complejidades del código subyacente. Es especialmente útil cuando necesita llamar a alguna API de bajo nivel desde un lenguaje de nivel superior y desea mantener oculto todo el código "feo".
Editar: puede encontrar más sobre esto en estos dos artículos de la wiki: biblioteca y función
fuente
Un Wrapper es un código que se crea para llamar internamente a alguna API sin cambiar la API real.
Un ejemplo de esto es el lanzamiento de Facebook de su SDK C # de Facebook . El SDK es en realidad un contenedor, ya que solo le permite llamar a su plataforma subyacente sin proporcionarle métodos y clases específicos. Por otro lado, Facebook Developer Toolkit es su API completa.
fuente
CoraScript
). Hay alrededor de 50 comandos en CoraScript, por ejemplo, uno que se conecta a un dispositivo, uno que envía archivos a ese dispositivo, le dice que ejecute una aplicación en su memoria Flash, etc. En lugar de codificar manualmente un CoraScript, Me gusta crear una biblioteca C # que generará dicho script. ¿Esta biblioteca de C # se llamaríawrapper library
para el lenguaje de secuencias de comandos CoraScript?Connect localhost
comando CoraScript devolvería la cadena+connect,"coralib3.dll version 1,8,11"
para indicar que el comando se ejecutó correctamente).Hay muchos ejemplos de "envoltorios" y el término a veces se usa indistintamente. A continuación se muestran algunos ejemplos que me vienen a la mente:
Contenedor de DLL
En el pasado, he creado un contenedor COM alrededor de una DLL .NET para usar las características avanzadas de .NET en aplicaciones más antiguas que entienden COM pero no entienden .NET.
Contenedor de objetos (Java)
En Java, hay una clase proporcionada en el
java.lang
paquete para proporcionar métodos de objeto para los ocho tipos primitivos. Todas las clases contenedoras primitivas en Java son inmutables. Por lo tanto, lasWrapper
clases se utilizan para representar valores primitivos cuandoObject
se requiere an .fuente
Función de envoltura, una función cuyo propósito principal es llamar a una segunda función
fuente
Digamos que desea agregar algunas funcionalidades más a su código, pero no puede cambiar el código. Ahí es donde ayuda la envoltura. Puede usar un contenedor para obtener la salida sin cambiar el código original.
fuente