Está en la página 1de 14

PATRONES ESTRUCTURALES

malvarez sanmiguel jorge


alahin toledo carrillo

Adapter
Intencin
Adapta una interfaz para que pueda ser utilizada por una clase que de otro modo
no podra utilizarla.
Motivacion
Necesitamos reutilizar clases ajenas para nuestro sistema, pero aunque la
funcionalidad de estas clases es la que deseamos, la interfaz no es compatible. Si
no podemos o no queremos modificar las clases a reutilizar, necesitamos hacerlas
compatibles con nuestro sistema.
Aplicabilidad
Se quiere utilizar una clase que llame a un mtodo a travs de una interface, pero
quieres utilizarlo con una clase que no implementa ese interface. Modificar esa
clase que implementa el interface no es una opcin por un par de razones:
1. No tienes el cdigo fuente de la clase.
2. La clase es una clase de propsito general, y es inapropiado para ella
implementar un interface par un propsito especfico.
Se quiere determinar dinmicamente que mtodos de otros objetos llama un
objeto.
Se quiere realizarlo sin que el objeto llamado tenga conocimientos de la otra clase
de objetos.

Estructura

Participantes

Target: Define la interfaz especifica del dominio en el que se quiere hacer uso de la
clase que se adapta.
Client: Utiliza objetos que implementan la interfaz definida por el target.
Adaptee: Presenta su interfaz original, que es la que se tiene que adaptar.
Adapter: Adapta la interfaz del objeto adaptado a la definida por el target.
Colaboraciones
Esta seccin est compuesta por mximo seis (6) palabras o frases que describan los
tpicos, reas o temas ms importantes del trabajo. Deben estar ordenadas
alfabticamente. La seleccin de palabras clave apropiadas permitir la inclusin del
artculo en ndices internacionales as como la ubicacin rpida del artculo por parte de
un lector interesado.
Consecuencias
El cliente y las clases Adaptee permanecen independientes unas de las otras.
El patrn Adapter introduce una in direccin adicional en un programa . Como cualquier
otra in direccin, contribuye a la dificultad implicada en la compresin del programa.
Se puede utilizar una clase Adapter para determinar cuales de los mtodos de un
objeto llama otro objeto.
Adaptadores de clase y el objeto tienen diferentes ventajas y desventajas. A class
adapter Una clase adaptador

Implementacin

La implementacin de una clase Adapter es ms bien sencilla. Sin


embargo, una cuestin que deberas considerar cuando
implementes el patrn Adapter es como los objetos adapter
conocen que instancia de la clase Adaptee llamar. Hay dos
mtodos:
1. Pasar una referencia a los objetos cliente como parmetro a los
costructores de los objetos adapter o a uno de sus mtodos. Esto
permite al objeto adapter ser utilizado con cualquier instancia o
posiblemente muchas instancias de la clase Adaptee.
Hacer la clase Adapter una clase interna de la clase Adaptee. Esto
simplifica la asociacin entre el objeto adapter y el objeto adaptee
haciendolo automtico.
Tambin hace la asociacin inflexible.

Bridge

Intencin
desacopla una abstraccin de su implementacin para que puedan variar
independientemente.
Motivacin
Cuando queremos que un objeto cambie su comportamiento, segn cambia su
estado, se presenta el problema de la complejidad de cdigo.
Aplicabilidad
Se usa el patrn Bridge cuando:
Se desea evitar un enlace permanente entre la abstraccin y su
implementacin. Esto puede ser debido a que la implementacin debe ser
seleccionada o cambiada en tiempo de ejecucin.
Tanto las abstracciones como sus implementaciones deben ser extensibles por
medio de subclases. En este caso, el patrn Bridge permite combinar
abstracciones e implementaciones diferentes y extenderlas
independientemente.
Cambios en la implementacin de una abstraccin no deben impactar en los
clientes, es decir, su cdigo no debe tener que ser recompilado.
(En C++) Se desea esconder la implementacin de una abstraccin
completamente a los clientes. En C++, la representacin de una clase es visible
en la interface de la clase.

Estructura

Participantes

Abstraction define una interface abstracta. Mantiene una referencia a un objeto de


tipo Implementor.
RefinedAbstraction extiende la interface definida por Abstraction
Implementor define la interface para la implementacin de clases. Esta interface no
se tiene que corresponder exactamente con la interface de Abstraction; de hecho,
las dos interfaces pueden ser bastante diferente. Tpicamente la interface
Implementor provee slo operaciones primitivas, y Abstraction define operaciones
de alto nivel basadas en estas primitivas.
ConcreteImplementor implementa la interface de Implementor y define su
implementacin concreta.
Colaboraciones
Abstraction emite los pedidos de los clientes a su objeto Implementor.
Consecuencias
Un objeto puede cambiar su implementacin en tiempo de ejecucin.
Cambios en la implementacin no requerirn compilar de nuevo la clase
Abstraccin y sus clientes.
Se mejora la extensibilidad.
Se ocultan detalles de implementacin a los clientes.

Decorator

Intencin
Fija responsabilidades adicionales a un objeto dinmicamente. Decoreirtors provee
una alternativa flexible a las subclasses para extender la funcionalidad.
Motivacin
A veces se desea adicionar responsabilidades a un objeto pero no a toda la clase.
Las responsabilidades se pueden adicionar por medio de los mecanismos de
Herencia, pero este mecanismo no es flexible porque la responsabilidad es
adicionada estticamente. La solucin flexible es la de rodear el objeto con otro
objeto que es el que adiciona la nueva responsabilidad. Este nuevo objeto es el
Decorator.
Aplicabilidad
Aadir objetos individuales de forma dinmica y transparente
Responsabilidades de un objeto pueden ser retiradas
Cuando la extensin mediante la herencia no es viable
Hay una necesidad de extender la funcionalidad de una clase, pero no hay razones
para extenderlo a travs de la herencia.
Hay la necesidad de extender dinmicamente la funcionalidad de un objeto y
quizs quitar la funcionalidad extendida.

Estructura

Participantes

Component
Define la interface de los objetos a los que se les pueden adicionar
responsabilidades dinmicamente.
ConcreteComponent
Define el objeto al que se le puede adicionar una responsabilidad.
Decorator
Mantiene una referencia al objeto Component y define una interface
de acuerdo con la interface de Component.
ConcreteDecorator
Adiciona la responsabilidad al Component.
Colaboraciones
Decorator enva las solicitudes a su componente de objeto.
Opcionalmente puede realizar operaciones adicionales antes y
despus del envo de la solicitud.

Proxy

Intencin
Proporcionar un sustituto o marcador de posicin de otro objeto para controlar el acceso a
ella.
Motivacin
Diferir el coste de crear un objeto hasta que sea necesario usarlo: creacin bajo demanda.
Un editor de documentos que incluyen objetos grficos.
Cmo ocultamos que una imagen se crear cuando se necesite?: manejar el documento
requiere conocer informacin sobre la imagen.
Hay situaciones en las que un cliente no referencia o no puede referenciar a un objeto
directamente, pero necesita interactuar con l.
Un objeto proxy puede actuar como intermediario entre el objeto cliente y el objeto destino.
El objeto proxy tiene la misma interfaz como el objeto destino.
El objeto proxy mantiene una referencia al objeto destino y puede pasarle a l los mensajes
recibidos (delegacin).
Retrasar la operacin de una clonacin de una tabla hasta conocer que es realmente
necesaria. Se desea clonar la tabla para evitar mantener un bloqueo un largo perodo de
tiempo: operacin costosa. Se puede crear una clase que encapsule la tabla y slo clone
cuando sea necesario.
Mantenimiento de los servicios ante los fallos.
Materializacin perezosa de tuplas en objetos

Aplicabilidad

Siempre que hay necesidad de referenciar a un objeto mediante una


referencia ms rica que un puntero o una referencia normal.
Situaciones comunes;
Proxy acceso remoto (acceso a un objeto en otro espacio de
direcciones)
Proxy virtual (crea objetos grandes bajo demanda)
Proxy para proteccin (controlar acceso a un objeto)
Referencia inteligente (smart reference, proporciona operaciones
adicionales)
Estructura

Participantes

Sujeto:
Define la interfaz comn para el RealSubject y el Proxy, de
modo que pueda usarse un Proxy en cualquier sitio en el
que se espere un RealSubject.
RealSubject:
Define el objeto real representado.
Proxy:
Mantiene una referencia que permite al Proxy acceder al
objeto real.
Proporciona una interfaz idntica a la del sujeto, de manera
que un Proxy pueda ser sustituido por el sujeto real.
Controla el acceso al sujeto real, y puede ser responsable
de su creacin y borrado.