¿Alguien puede explicar el concepto de adaptador conectable a mí con buen ejemplo?¿Alguien puede explicarme el concepto de adaptador enchufable con buen ejemplo?
Respuesta
Usted puede leer this article sobre el adaptador/patrón enchufable:
Tabla de contenidos en este artículo:
* 1 Design Patterns
* 2 Intent of Adapter
* 3 Motivation
* 4 Structure
* 5 Applicability
* 6 Consequences
* 7 Implementation
o 7.1 Known Uses and Sample Code
o 7.2 Related Patterns
* 8 Conclusions
* 9 Appendix
o 9.1 References
o 9.2 Glossary
Cita:
Smalltalk introdujo el concepto de un "adaptador enchufable "para describir clases con una función de interfaz de adaptación. Este concepto interesante permite para las clases que se introducirán en los sistemas existentes que podrían esperar diferentes interfaces para la clase . Esta técnica puede ayudar a promover la reutilización clase a través de módulos e incluso proyectos.
Aquí hay un pequeño ejemplo:
Tenemos dos clases - Foo & Boo que da salida a un trozo de cuerda a la consola. La clase de adaptador puede adaptar métodos de ambas clases para proporcionar la interfaz (SaySomething) requerida por el cliente. Tenga en cuenta que no hay dependencia en el nombre de la interfaz; podemos adaptar fácilmente los métodos SayHey y Bark.
class Foo
{
public static void SayHey() { Console.WriteLine("Hey!"); }
}
class Boo
{
public static void Bark() { Console.WriteLine("Woof!"); }
}
class Adapter
{
public Action SaySomething { get; private set;} // "pluggable" adapter
public Adapter(Action saySomethingAction)
{
SaySomething = saySomethingAction;
}
}
class Program
{
static void Main(string[] args)
{
(new Adapter(Foo.SayHey)).SaySomething();
(new Adapter(Boo.Bark)).SaySomething();
}
}
Por lo que entendí de una lectura rápida de los resultados de Google, un adaptador enchufable es un adaptador que no está codificado con fuerza contra una adaptée específica. En la superficie (la propia interfaz del adaptador), es todo lo mismo, pero se puede adaptar a diferentes adaptaciones con diferentes interfaces. He encontrado this thread bastante explicativo:
Básicamente, se le permite poner en un adaptador cuando el adaptado protocolo (receptor) no se conoce en tiempo de compilación mediante el uso de la reflexión. Cuando se crea la instancia adaptador, se le pasa el nombre del método de el adaptado para llamar, y también los metadatos que es necesaria para traducir tipos de entrada. Cuando el adaptador recibe una llamada al método de la interfaz de destino , se utiliza la reflexión para llamar al método correspondiente especificado en el adaptado.
Y this:
La responsabilidad principal del Visor es poblar un widget de un modelo de dominio sin hacer ninguna suposición sobre dominio de sí mismo. JFace espectador utiliza la Delegar Objetos mecanismo de adapter enchufable para implementar el requisito anterior.
pensar en él como un Facehugger de Alien; cuando abraza una cara, todo lo que ves es la espalda fangosa de la facehugger. Puede empujarlo con un palo e intentar levantar sus brazos (la interfaz del adaptador). Pero básicamente puede abrazar a cualquier humano (el adaptado), independientemente de las características de la cara. Tal vez lo estoy presionando un poco, pero, oye, amo a Alien.
¡Gran analogía! :) – cschol
Una característica distintiva del adaptador enchufable es que el método invocado por el cliente y el método existente en la interfaz pueden ser diferentes.
interface Ilegacy
{
float calculate(int a, int b);
}
class Legacy : Ilegacy
{
public float calculate(int a, int b)
{
return a * b;
}
}
class Adapter
{
public Func<int, int, float> legacyCalculator;
public Adapter()
{
this.legacyCalculator = new Legacy().calculate;
}
}
class Client
{
static void Main()
{
float result = new Adapter().legacyCalculator(5, 6);
}
}
Normalmente, esto puede acheived con el uso de delegado, o Func Acción en C#
- 1. ¿Alguien puede explicarme el polimorfismo?
- 2. ¿Puede alguien explicarme los hilos?
- 3. ¿Puede alguien explicarme este código?
- 4. Puede alguien explicarme esta `StaleDataException`
- 5. ¿alguien puede explicarme @MapsId en Hibernate?
- 6. ¿Puede alguien explicarme NaN en Ruby?
- 7. ¿Puede alguien explicarme esta consulta SQL?
- 8. ¿Alguien puede explicarme este script cmake?
- 9. ¿Alguien puede explicarme las reglas de 1NF, 2NF, 3NF, BCNF con un ejemplo apropiado?
- 10. ¿Puede alguien explicarme los niveles de confianza de ASP.NET?
- 11. ¿Puede alguien explicarme cuándo es útil usar MapMaker o WeakHashMaps?
- 12. ¿Alguien puede diagramar el concepto de SVN Branching?
- 13. ¿Alguien puede explicarme esta excepción de solo lectura?
- 14. ¿Puede alguien explicarme este ataque de inyección SQL?
- 15. ¿Alguien puede explicarme este método de oscilación de javax?
- 16. ¿Alguien puede explicarme esta función de "endian-ness"?
- 17. ¿Podría alguien explicarme ASP.NET MVC?
- 18. PHP - ¿Alguien puede explicarme la función pfsockopen? (Socket constante)
- 19. ¿Puede alguien explicarme la siguiente expresión de Haskell
- 20. ¿alguien puede explicarme qué claves principales realmente hacen?
- 21. ¿Puede alguien explicarme qué está haciendo este método GetCardinality?
- 22. ¿Puede alguien explicarme las conversiones implícitas en Scala?
- 23. ¿Alguien puede explicarme la clase << a mí?
- 24. ¿Puede alguien explicarme los cuantificadores posesivos? (Expresiones regulares)
- 25. ¿Puede alguien explicarme la función pack() en PHP?
- 26. ¿Alguien puede mostrar un ejemplo de MethodImplOptions.ForwardRef
- 27. ¿Alguien puede explicar el ejemplo de solicitud-respuesta corredor zeromq?
- 28. buen ejemplo de OO JS?
- 29. ¿Buen ejemplo de usar libpurple?
- 30. ¿Alguien puede explicarme las decisiones de diseño detrás de Autpolisp/visual lisp?
hice referencia dicho artículo. Supongo que también buscas eso con Google. Pero no explica claramente sobre el adaptador enchufable. Se refiere al libro de GoF que he leído. –
El enlace al artículo ahora está roto. – miguelbgouveia