Adapter (patrón de deseño)
| Este artigo ou sección precisa de máis fontes ou referencias que aparezan nunha publicación acreditada que poidan verificar o seu contido, como libros de texto ou outras publicacións especializadas no tema. Por favor, axude mellorando este artigo. (Desde maio de 2012.) |
Adapter (tamén chamado wrapper ou adaptador) e un patrón de deseño estrutural que serve para transformar unha interface noutra compatible coa clase na que se quere utilizar.
Índice |
Motivación [editar]
| Faltan ligazóns internas neste artigo ou sección. Por favor, axude wikificándoo. |
Algunhas veces unha clase deseñada para ser reusada non pode selo por que a súa interface non coincide coa interface específica que require unha determinada aplicación. Un exemplo disto sería que unha clase proporcionase valores booleanos en formato “true”/”false” pero a clase dende a que se vai utilizar necesite eses valores en formato 1/0, desta forma a clase adaptadora realizaría o cambio.
Tamén pode ocorrer que o adaptador sexa responsable dunha funcionalidade que a clase adaptada non ten.
Aplicabilidade [editar]
- Utilizarase este patrón cando se queira usar una clase existente pero a interface non coincida coa que se necesita.
- Cando se queira crear unha clase reusable por clases non relacionadas ou imprevistas e que non teñen por que ter a mesma interface.
- Cando queiramos utilizar subclases existentes pero non sexa adecuado adaptar as súas interfaces. En este caso pódese adaptar a súa interface por medio dunha clase adaptadora da interface do seu pai.
Estrutura [editar]
Temos dúas posibles opcións a hora de abordar este patrón:
- Utilizar a herdanza múltiple, de forma que a clase adaptadora herde de ambas interfaces.
- Substituír a herdanza múltiple por herdanza a clase obxectivo e unha referencia a clase adaptada.
Participantes [editar]
- Obxectivo: Define a interface específica que o cliente utiliza.
- Cliente: Colabora cos obxectos que conforman o obxectivo.
- Adaptado: Define unha interface existente que necesita ser adaptada.
- Adaptador: Adapta a interface existente a interface do obxectivo.
Consecuencias [editar]
- As veces pódese engadir funcionalidades a clase adaptada.
- A clase adaptadora non permite adaptar unha clase e todas as súas subclases e permite que o adaptador redefina parte do comportamento do adaptado.
- O adaptador permite adaptar diversos obxectos pero é difícil cambiar o comportamento do adaptado.
- É importante ter en conta que a existencia de dúas opcións a hora de poñer en funcionamento este patrón resulta conveniente pola imposibilidade de algunhas linguaxes de programación para o uso de herdanza múltiple.
Exemplo [editar]
No seguinte exemplo queremos que unha clase cliente sexa capaz de comprobar o estado dunha rede de auga e de electricidade nun determinado punto.
Para a enquisa da electricidade dispoñemos dun método ao que poderíamos chamar directamente dende a comprobación da electricidade. No caso da agua so dispoñemos dun método getNivel, que nos da o nivel de auga nese momento. Deberemos comprobar nós se o nivel é o adecuado para determinar que a comprobación é certa.
É neste punto onde se introduce o patrón adaptador, para permitir a comprobación en base aos valores proporcionados pola outra clase.