Patrones Estructurales: Escenarios de uso

Patrón Cuándo usarlo Consigue Ejemplo
Adapter -Se quiere usar una clase existente y su interfaz no concuerda con la que se necesita.

-Deba realizar una traducción entre interfaces de varios objetos.

-Se quiere crear una clase reutilizable que coopere con clases no relacionadas o que no han sido previstas

-Es necesario usar varias subclases existentes, pero no resulta práctico adaptar su interfaz

-El cliente es independiente de las clases finales que utiliza.

-La clase adaptadora puede redefinir y ampliar la interfaz de la clase adaptada.

Composite -Tenga que representar un componente modelado como unaestructura rama-hoja (o parte-todo o contenedor-contenido).

-La estructura pueda tener cualquier nivel de complejidad y sea dinámica.

– Quiera tratar de forma uniforme toda la estructura delcomponente, utilizando operaciones comunes para toda la

jerarquía.

-Desee que los clientes sean capaces de obviar las diferencias entre objetos compuestos e individuales.

-Se crea una jerarquía de objetos básicos y de composiciones de estos de forma recursiva.

-Simplifica el cliente al tratar a todos los objetos de igual forma.

– Facilita agregar nuevas clases de componentes insertándolas en la jerarquía de clases como hijas de

Compuesto u Hoja

-Puede generalizar el diseño, haciendo difícil restringir los componentes de un objeto compuesto.

Decorator -Para añadir funcionalidad a una clase sin las restricciones que implica la utilización de la herencia.

-Cuando se quiera añadir funcionalidad a una clase de forma dinámica en tiempo de ejecución y que sea transparente a los usuarios.

-Haya características que varíen

, que deban ser aplicadas de forma dinámica y que se puedan combinar arbitrariamente sobre un componente.

-Ofrece más flexibilidad que la herencia estática. Con los

decoradores se pueden añadir y eliminar responsabilidades en tiempo de ejecución.

-Se consiguen componentes muy parecidos.

-Se reduce el número de clases y el árbol de herencia de clases. Teniendo menos clases se simplifica el diseño y la implementación de los programas.

-Un objeto decorador no es un objeto componente, por lo que se pierde la identidad del objeto.

Facade -Tenga que reducir la dependencia entre clases: Facade ofrece un punto de acceso al resto de clases, si estas cambian o se sustituyen por otras, sólo hay que actualizar la clase Facade sin

que el cambio afecte a las aplicaciones cliente.

-Se ofrece un acceso sencillo a subsistemas complejos proporcionando una interfaz más sencilla sin eliminar las opciones avanzadas.

-Tenga que descomponer un sistema en capas, puede utilizar Facade para ofrecer una interfaz de acceso entre las mismas.

-Reducir el acoplamiento entre los clientes y los subsistemas.

-Oculta a los clientes parte de la complejidad de los subsistemas haciendo que el subsistema sea más fácil de usar.

-Disminuye el acoplamiento entre los subsistemas y el cliente. Un acoplamiento débil nos permite modificar los componentes del sistema sin que sus clientes se vean afectados.

-Se facilita la estructuración en capas.

– No impide que los clientes usen las clases del subsistema directamente en caso de necesitarlo.

Proxy -Cuando necesite sustituir una referencia simple a un objeto por una referencia más elaborada:

Proxy Remoto: Cuando el objeto está en un sistema remoto y necesite un representante local.

Proxy Virtual: Para retrasar la creación de objetos costosos hasta que sean necesarios.

Proxy de Protección: Para controlar los derechos de acceso a un objeto.

Proxy de Sincronización: Para gestionar accesos de múltiples clientes a un recurso.

Referencias Inteligentes: Para gestión y mantenimiento del acceso a un objeto real

-El patrón Proxy introduce un nivel de indirección al acceder a un objeto.

-Puede mejorar la eficiencia al retrasar la instanciación de un

objeto costoso hasta que sea necesario utilizarlo.

-Aumenta la seguridad.

-Los clientes se desentienden de la ubicación de los componentes accedidos.

Respuesta

Deja un comentario