Adapter (patrón de deseño)

Na Galipedia, a Wikipedia en galego.


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]

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]

  1. Utilizarase este patrón cando se queira usar una clase existente pero a interface non coincida coa que se necesita.
  2. Cando se queira crear unha clase reusable por clases non relacionadas ou imprevistas e que non teñen por que ter a mesma interface.
  3. 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:

Opción 1.
  • Utilizar a herdanza múltiple, de forma que a clase adaptadora herde de ambas interfaces.
Opción 2.
  • 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]

Exemplo de uso.

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.