Está en la página 1de 44

Patrones de

Diseo
Definicin
Los patrones de diseo son la base para la bsqueda de soluciones a problemas
comunes en el desarrollo de software y otros mbitos referentes al diseo de
interaccin o interfaces.

Un patrn de diseo es una solucin a un problema de diseo de software.
Para que una solucin sea considerada un patrn debe poseer ciertas
caractersticas. Una de ellas es que debe haber comprobado su efectividad
resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser
reusable, lo que significa que es aplicable a diferentes problemas de diseo de
software en distintas circunstancias.

Objetivo de un patrn de diseo

Los patrones de diseo pretenden:
Proporcionar catlogos de elementos reusables en el diseo de sistemas software.
Evitar la reiteracin en la bsqueda de soluciones a problemas ya conocidos y
solucionados anteriormente.
Formalizar un vocabulario comn entre diseadores.
Estandarizar el modo en que se realiza el diseo.
Facilitar el aprendizaje de las nuevas generaciones de diseadores condensando
conocimiento ya existente.


Categoras de patrones


Patrones de arquitectura: Aqullos que expresan un esquema
organizativo estructural fundamental para sistemas de software.
Patrones de diseo: Aqullos que expresan esquemas para definir
estructuras de diseo (o sus relaciones) con las que construir sistemas
de software.
Dialectos: Patrones de bajo nivel especficos para un lenguaje de
programacin o entorno concreto.

Patrones creacionales
Es la inicializacin y configuracin de objetos.
Abstract Factory (Fbrica abstracta): Permite trabajar con objetos de distintas
familias de manera que las familias no se mezclen entre s y haciendo
transparente el tipo de familia concreta que se est usando.
Builder (Constructor virtual): Abstrae el proceso de creacin de un objeto
complejo, centralizando dicho proceso en un nico punto.
Factory Method (Mtodo de fabricacin): Centraliza en una clase constructora la
creacin de objetos de un subtipo de un tipo determinado, ocultando al usuario
la casustica para elegir el subtipo que crear.
Prototype (Prototipo): Crea nuevos objetos clonndolos de una instancia ya
existente.
Singleton(Instancia nica): Garantiza la existencia de una nica instancia para una
clase y la creacin de un mecanismo de acceso global a dicha instancia

Patrones estructurales

En los patrones estructurales se separan la interfaz de la implementacin.
Adapter (Adaptador): Adapta una interfaz para que pueda ser utilizada por una
clase que de otro modo no podra utilizarla.
Bridge (Puente): Desacopla una abstraccin de su implementacin.
Composite (Objeto compuesto): Permite tratar objetos compuestos como si de
uno simple se tratase.
Decorator (Envoltorio): Aade funcionalidad a una clase dinmicamente.
Facade (Fachada): Provee de una interfaz unificada simple para acceder a una
interfaz o grupo de interfaces de un subsistema.
Flyweight (Peso ligero): Reduce la redundancia cuando gran cantidad de objetos
poseen idntica informacin.
Proxy: Mantiene un representante de un objeto.

Patrones de comportamiento
Los patrones de comportamiento ms que describir objetos o clases, describen la
comunicacin entre ellos.
Iterator (Iterador): Permite realizar recorridos sobre objetos compuestos
independientemente de la implementacin de estos.
Mediator (Mediador): Define un objeto que coordine la comunicacin entre
objetos de distintas clases, pero que funcionan como un conjunto.
Observer (Observador): Define una dependencia de uno-a-muchos entre
objetos, de forma que cuando un objeto cambie de estado se notifique y
actualicen automticamente todos los objetos que dependen de l.
Strategy (Estrategia): Permite disponer de varios mtodos para resolver un
problema y elegir cul utilizar en tiempo de ejecucin.
Visitor(Visitante): Permite definir nuevas operaciones sobre una jerarqua de
clases sin modificar las clases sobre las que opera.

Patrn De diseo Adapter
El patrn Adapter se utiliza para transformar una interfaz en otra, de tal modo que
una clase que no pudiera utilizar la primera, haga uso de ella a travs de la
segunda.
Propsito
Convierte la interfaz de una clase en otra interfaz que el cliente espera. Adapter
permite a las clases trabajar juntas, lo que de otra manera no podran hacerlo
debido a sus interfaces incompatibles.
Estructura de Adapter
Una clase adaptadora usa mltiples herencias para adoptar una interfaz a otra.
Estructura de Adapter
Un objeto adaptador cuenta con la composicin de objetos.
Patrn De diseo Strategy
Strategy es un patrn de diseo para el desarrollo de software.
El patrn Strategy permite mantener un conjunto de algoritmos de los que el objeto cliente
puede elegir aquel que le conviene e intercambiarlo segn sus necesidades.
Los distintos algoritmos se encapsulan y el cliente trabaja contra un objeto contexto o
Context. Como hemos dicho, el cliente puede elegir el algoritmo que prefiera de entre los
disponibles o puede ser el mismo objeto Context el que elija el ms apropiado para cada
situacin.
Cualquier programa que ofrezca un servicio o funcin determinada, que pueda ser realizada
de varias maneras, es candidato a utilizar el patrn Strategy. Puede haber cualquier nmero
de estrategias y cualquiera de ellas podr ser intercambiada por otra en cualquier momento,
incluso en tiempo de ejecucin.

Estructura Strategy
DISEO DE PATRONES
ESTRUCTURALES
DISEO DE PATRONES
ESTRUCTURALES
Patrones Estructurales
Apoderado (Proxy): Un objeto se aproxima a otro.
Adaptador (Adapter): Convierte una interfaz en
otra.
Puente (Bridge): Desacopla una abstraccin de
su implementacin permitiendo modificarlas
independientemente.
Objeto Compuesto (Composite): Utilizado para
construir objetos complejos a partir de otros ms
simples, utilizando para ello la composicin
recursiva y una estructura de rbol.

DISEO DE PATRONES
ESTRUCTURALES
Patrones Estructurales
Envoltorio (Decorator): Permite aadir
dinmicamente funcionalidad a una clase
existente, evitando heredar sucesivas clases para
incorporar la nueva funcionalidad.
Fachada (Facade): Permite simplificar la interfaz
para un subsistema.
Peso Ligero (Flyweight): Elimina la redundancia o
la reduce cuando tenemos gran cantidad de
objetos con informacin idntica.
PROXY
Propsito
- Proporcionar un representante o substituto de
otro objeto para controlar el acceso a este.
Tambin conocido como.
- Surrogate (substituto).
Motivacin.
- Retrasar el coste de creacin e inicializacin de
un objeto hasta que sea realmente necesario.q
- Ej.: al abrir un documento, no abrir las imgenes
que no sean visibles.
Proxy
Propsito

Propsito.

Proporcionar un representante o substituto de otro objeto

para controlar el acceso a este.

Tambin conocido como.

Surrogate (substituto).
M ti i

Motivacin.

Retrasar el coste de creacin e inicializacin de un objeto

hasta que sea realmente necesario.

q

Ej.: al abrir un documento, no abrir las imgenes que no sean

visibles.
PROXY
Proxy
Propsito

Propsito.

Proporcionar un representante o substituto de otro objeto

para controlar el acceso a este.

Tambin conocido como.

Surrogate (substituto).
M ti i

Motivacin.

Retrasar el coste de creacin e inicializacin de un objeto

hasta que sea realmente necesario.

q

Ej.: al abrir un documento, no abrir las imgenes que no sean

visibles.
PROXY
Motivacin.

Proxy
Propsito

Propsito.

Proporcionar un representante o substituto de otro objeto

para controlar el acceso a este.

Tambin conocido como.

Surrogate (substituto).
M ti i

Motivacin.

Retrasar el coste de creacin e inicializacin de un objeto

hasta que sea realmente necesario.

q

Ej.: al abrir un documento, no abrir las imgenes que no sean

visibles.
PROXY
Aplicabilidad.
Cuando hay necesidad de una referencia a un objeto ms
flexible o sofisticada que un puntero.
Proxy Remoto: un representante para un objeto que se
encuentra en otro espacio de direcciones.
Proxy Virtual: Crea objetos costosos por encargo (ej.:
IP)ImageProxy).
Proxy de Proteccin: Controla el acceso al objeto original
(permisos de acceso).
Referencia inteligente: sustituto de un puntero, que lleva a
cabo operaciones adicionales cuando se accede a un
objeto.
Contar el nmero de referencias.
Cargar un objeto persistente en memoria.
Bloquear el objeto cuando se accede a l (no modificacin
concurrente)
Proxy
Propsito

Propsito.

Proporcionar un representante o substituto de otro objeto

para controlar el acceso a este.

Tambin conocido como.

Surrogate (substituto).
M ti i

Motivacin.

Retrasar el coste de creacin e inicializacin de un objeto

hasta que sea realmente necesario.

q

Ej.: al abrir un documento, no abrir las imgenes que no sean

visibles.
Aplicabilidad.

Cuando hay necesidad de una referencia a un objeto ms

flexible o sofisticada que un puntero.

Proxy Remoto: un representante para un objeto que se

encuentra en otro espacio de direcciones.

Proxy Virtual: Crea objetos costosos por encargo (ej.:

I

P

)

ImageProxy).

Proxy de Proteccin: Controla el acceso al objeto original

(permisos de acceso).

Referencia inteligente: sustituto de un puntero, que lleva a

cabo operaciones adicionales cuando se accede a un objeto

(ver ejemplo operadores C++):

C t

l

d

f

i

Contar el nmero de referencias.

Cargar un objeto persistente en memoria.

Bloquear el objeto cuando se accede a l (no modificacin

concurrente)

72

concurrente)
PROXY
Estructura.

Proxy
Propsito

Propsito.

Proporcionar un representante o substituto de otro objeto

para controlar el acceso a este.

Tambin conocido como.

Surrogate (substituto).
M ti i

Motivacin.

Retrasar el coste de creacin e inicializacin de un objeto

hasta que sea realmente necesario.

q

Ej.: al abrir un documento, no abrir las imgenes que no sean

visibles.
Aplicabilidad.

Cuando hay necesidad de una referencia a un objeto ms

flexible o sofisticada que un puntero.

Proxy Remoto: un representante para un objeto que se

encuentra en otro espacio de direcciones.

Proxy Virtual: Crea objetos costosos por encargo (ej.:

I

P

)

ImageProxy).

Proxy de Proteccin: Controla el acceso al objeto original

(permisos de acceso).

Referencia inteligente: sustituto de un puntero, que lleva a

cabo operaciones adicionales cuando se accede a un objeto

(ver ejemplo operadores C++):

C t

l

d

f

i

Contar el nmero de referencias.

Cargar un objeto persistente en memoria.

Bloquear el objeto cuando se accede a l (no modificacin

concurrente)

72

concurrente)
PROXY
Participantes.
Subject: Clase padre de las clases Proxy y
RealSubject, definiendo sus interfaces de modo
que Proxy pueda reemplazar a RealSubject y
viceversa.
RealSubject: Clase final que ser pedida por el
cliente
Proxy: Clase intermedia entre el cliente y
RealSubject.
Proxy
Propsito

Propsito.

Proporcionar un representante o substituto de otro objeto

para controlar el acceso a este.

Tambin conocido como.

Surrogate (substituto).
M ti i

Motivacin.

Retrasar el coste de creacin e inicializacin de un objeto

hasta que sea realmente necesario.

q

Ej.: al abrir un documento, no abrir las imgenes que no sean

visibles.
Aplicabilidad.

Cuando hay necesidad de una referencia a un objeto ms

flexible o sofisticada que un puntero.

Proxy Remoto: un representante para un objeto que se

encuentra en otro espacio de direcciones.

Proxy Virtual: Crea objetos costosos por encargo (ej.:

I

P

)

ImageProxy).

Proxy de Proteccin: Controla el acceso al objeto original

(permisos de acceso).

Referencia inteligente: sustituto de un puntero, que lleva a

cabo operaciones adicionales cuando se accede a un objeto

(ver ejemplo operadores C++):

C t

l

d

f

i

Contar el nmero de referencias.

Cargar un objeto persistente en memoria.

Bloquear el objeto cuando se accede a l (no modificacin

concurrente)

72

concurrente)
Participantes.

Proxy.

Mantiene una referencia que permite al proxy acceder al objeto real.

Proporciona una interfaz igual que la del sujeto real.

Controla el acceso al sujeto real, y puede ser responsable de crearlo y

borrarlo.

Otras responsabilidades, dependen del tipo de proxy:

Proxy Remoto: codifican las peticiones y se las mandan al sujeto

Proxy Remoto: codifican las peticiones, y se las mandan al sujeto.

Proxy virtual: Puede guardar informacin adicional sobre el sujeto, para

retardar el acceso al mismo.

Proxy de proteccin: comprueba que el llamador tiene permiso para

realizar la peticin

realizar la peticin.

Subject.

Define una interfaz comn para el RealSubject y el Proxy, de tal

manera que el Proxy se puede usan en vez del RealSubject

manera que el Proxy se puede usan en vez del RealSubject.

RealSubject.

Define el objeto real que el proxy representa.

Colaboraciones
74

Colaboraciones.

El proxy redirige peticiones al sujeto real cuando sea necesario,

dependiendo del tipo de proxy.
PROXY
Colaboraciones
Al ser Proxy el intermediario entre las peticiones
del cliente y el RealSubject, este se comunica
con RealSubject, solo cuando es necesario,
dependiendo del tipo de Proxy que se este
utilizando.
Proxy
Propsito

Propsito.

Proporcionar un representante o substituto de otro objeto

para controlar el acceso a este.

Tambin conocido como.

Surrogate (substituto).
M ti i

Motivacin.

Retrasar el coste de creacin e inicializacin de un objeto

hasta que sea realmente necesario.

q

Ej.: al abrir un documento, no abrir las imgenes que no sean

visibles.
Aplicabilidad.

Cuando hay necesidad de una referencia a un objeto ms

flexible o sofisticada que un puntero.

Proxy Remoto: un representante para un objeto que se

encuentra en otro espacio de direcciones.

Proxy Virtual: Crea objetos costosos por encargo (ej.:

I

P

)

ImageProxy).

Proxy de Proteccin: Controla el acceso al objeto original

(permisos de acceso).

Referencia inteligente: sustituto de un puntero, que lleva a

cabo operaciones adicionales cuando se accede a un objeto

(ver ejemplo operadores C++):

C t

l

d

f

i

Contar el nmero de referencias.

Cargar un objeto persistente en memoria.

Bloquear el objeto cuando se accede a l (no modificacin

concurrente)

72

concurrente)
Participantes.

Proxy.

Mantiene una referencia que permite al proxy acceder al objeto real.

Proporciona una interfaz igual que la del sujeto real.

Controla el acceso al sujeto real, y puede ser responsable de crearlo y

borrarlo.

Otras responsabilidades, dependen del tipo de proxy:

Proxy Remoto: codifican las peticiones y se las mandan al sujeto

Proxy Remoto: codifican las peticiones, y se las mandan al sujeto.

Proxy virtual: Puede guardar informacin adicional sobre el sujeto, para

retardar el acceso al mismo.

Proxy de proteccin: comprueba que el llamador tiene permiso para

realizar la peticin

realizar la peticin.

Subject.

Define una interfaz comn para el RealSubject y el Proxy, de tal

manera que el Proxy se puede usan en vez del RealSubject

manera que el Proxy se puede usan en vez del RealSubject.

RealSubject.

Define el objeto real que el proxy representa.

Colaboraciones
74

Colaboraciones.

El proxy redirige peticiones al sujeto real cuando sea necesario,

dependiendo del tipo de proxy.
PROXY
Consecuencias
El patrn de diseo proxy introduce cierto nivel
de desviacin de acceso a la clase final
requerida, brindando as un mayor control sobre
el mismo.
Implementacin
Para implementar este patrn, se debe crear una
Clase padre (Subject) para la clase que
deseemos restringir (RealSubject), luego de esto
se debe crear una clase hija (Proxy) al nivel de la
clase restringida.
Proxy
Propsito

Propsito.

Proporcionar un representante o substituto de otro objeto

para controlar el acceso a este.

Tambin conocido como.

Surrogate (substituto).
M ti i

Motivacin.

Retrasar el coste de creacin e inicializacin de un objeto

hasta que sea realmente necesario.

q

Ej.: al abrir un documento, no abrir las imgenes que no sean

visibles.
Aplicabilidad.

Cuando hay necesidad de una referencia a un objeto ms

flexible o sofisticada que un puntero.

Proxy Remoto: un representante para un objeto que se

encuentra en otro espacio de direcciones.

Proxy Virtual: Crea objetos costosos por encargo (ej.:

I

P

)

ImageProxy).

Proxy de Proteccin: Controla el acceso al objeto original

(permisos de acceso).

Referencia inteligente: sustituto de un puntero, que lleva a

cabo operaciones adicionales cuando se accede a un objeto

(ver ejemplo operadores C++):

C t

l

d

f

i

Contar el nmero de referencias.

Cargar un objeto persistente en memoria.

Bloquear el objeto cuando se accede a l (no modificacin

concurrente)

72

concurrente)
Participantes.

Proxy.

Mantiene una referencia que permite al proxy acceder al objeto real.

Proporciona una interfaz igual que la del sujeto real.

Controla el acceso al sujeto real, y puede ser responsable de crearlo y

borrarlo.

Otras responsabilidades, dependen del tipo de proxy:

Proxy Remoto: codifican las peticiones y se las mandan al sujeto

Proxy Remoto: codifican las peticiones, y se las mandan al sujeto.

Proxy virtual: Puede guardar informacin adicional sobre el sujeto, para

retardar el acceso al mismo.

Proxy de proteccin: comprueba que el llamador tiene permiso para

realizar la peticin

realizar la peticin.

Subject.

Define una interfaz comn para el RealSubject y el Proxy, de tal

manera que el Proxy se puede usan en vez del RealSubject

manera que el Proxy se puede usan en vez del RealSubject.

RealSubject.

Define el objeto real que el proxy representa.

Colaboraciones
74

Colaboraciones.

El proxy redirige peticiones al sujeto real cuando sea necesario,

dependiendo del tipo de proxy.
PROXY
Caso.
Se desea realizar un registro de usuarios de dos tipos:
Administrator y Generic, ambos tienen un campo
distintivo, Administrator tiene el campo codeAdmin
y Generic tiene el campo levelUser, ambos son
nmeros aleatorios generados por el sistema pero
mostrados al momento de registrar el nuevo usuario.
As mismo se desea obtener un listado de los usuarios
registrados agrupados por el tipo de usuario.

Proxy
Propsito

Propsito.

Proporcionar un representante o substituto de otro objeto

para controlar el acceso a este.

Tambin conocido como.

Surrogate (substituto).
M ti i

Motivacin.

Retrasar el coste de creacin e inicializacin de un objeto

hasta que sea realmente necesario.

q

Ej.: al abrir un documento, no abrir las imgenes que no sean

visibles.
Aplicabilidad.

Cuando hay necesidad de una referencia a un objeto ms

flexible o sofisticada que un puntero.

Proxy Remoto: un representante para un objeto que se

encuentra en otro espacio de direcciones.

Proxy Virtual: Crea objetos costosos por encargo (ej.:

I

P

)

ImageProxy).

Proxy de Proteccin: Controla el acceso al objeto original

(permisos de acceso).

Referencia inteligente: sustituto de un puntero, que lleva a

cabo operaciones adicionales cuando se accede a un objeto

(ver ejemplo operadores C++):

C t

l

d

f

i

Contar el nmero de referencias.

Cargar un objeto persistente en memoria.

Bloquear el objeto cuando se accede a l (no modificacin

concurrente)

72

concurrente)
Participantes.

Proxy.

Mantiene una referencia que permite al proxy acceder al objeto real.

Proporciona una interfaz igual que la del sujeto real.

Controla el acceso al sujeto real, y puede ser responsable de crearlo y

borrarlo.

Otras responsabilidades, dependen del tipo de proxy:

Proxy Remoto: codifican las peticiones y se las mandan al sujeto

Proxy Remoto: codifican las peticiones, y se las mandan al sujeto.

Proxy virtual: Puede guardar informacin adicional sobre el sujeto, para

retardar el acceso al mismo.

Proxy de proteccin: comprueba que el llamador tiene permiso para

realizar la peticin

realizar la peticin.

Subject.

Define una interfaz comn para el RealSubject y el Proxy, de tal

manera que el Proxy se puede usan en vez del RealSubject

manera que el Proxy se puede usan en vez del RealSubject.

RealSubject.

Define el objeto real que el proxy representa.

Colaboraciones
74

Colaboraciones.

El proxy redirige peticiones al sujeto real cuando sea necesario,

dependiendo del tipo de proxy.
PROXY
Solucin.
Para resolver este caso, primero armamos el
diagrama de base de datos necesario para
soportar esta solucin:
Proxy
Propsito

Propsito.

Proporcionar un representante o substituto de otro objeto

para controlar el acceso a este.

Tambin conocido como.

Surrogate (substituto).
M ti i

Motivacin.

Retrasar el coste de creacin e inicializacin de un objeto

hasta que sea realmente necesario.

q

Ej.: al abrir un documento, no abrir las imgenes que no sean

visibles.
Aplicabilidad.

Cuando hay necesidad de una referencia a un objeto ms

flexible o sofisticada que un puntero.

Proxy Remoto: un representante para un objeto que se

encuentra en otro espacio de direcciones.

Proxy Virtual: Crea objetos costosos por encargo (ej.:

I

P

)

ImageProxy).

Proxy de Proteccin: Controla el acceso al objeto original

(permisos de acceso).

Referencia inteligente: sustituto de un puntero, que lleva a

cabo operaciones adicionales cuando se accede a un objeto

(ver ejemplo operadores C++):

C t

l

d

f

i

Contar el nmero de referencias.

Cargar un objeto persistente en memoria.

Bloquear el objeto cuando se accede a l (no modificacin

concurrente)

72

concurrente)
Participantes.

Proxy.

Mantiene una referencia que permite al proxy acceder al objeto real.

Proporciona una interfaz igual que la del sujeto real.

Controla el acceso al sujeto real, y puede ser responsable de crearlo y

borrarlo.

Otras responsabilidades, dependen del tipo de proxy:

Proxy Remoto: codifican las peticiones y se las mandan al sujeto

Proxy Remoto: codifican las peticiones, y se las mandan al sujeto.

Proxy virtual: Puede guardar informacin adicional sobre el sujeto, para

retardar el acceso al mismo.

Proxy de proteccin: comprueba que el llamador tiene permiso para

realizar la peticin

realizar la peticin.

Subject.

Define una interfaz comn para el RealSubject y el Proxy, de tal

manera que el Proxy se puede usan en vez del RealSubject

manera que el Proxy se puede usan en vez del RealSubject.

RealSubject.

Define el objeto real que el proxy representa.

Colaboraciones
74

Colaboraciones.

El proxy redirige peticiones al sujeto real cuando sea necesario,

dependiendo del tipo de proxy.
PROXY
Solucin.
Tambin
desarrollamos el
diagrama de clases
para el desarrollo:
Proxy
Propsito

Propsito.

Proporcionar un representante o substituto de otro objeto

para controlar el acceso a este.

Tambin conocido como.

Surrogate (substituto).
M ti i

Motivacin.

Retrasar el coste de creacin e inicializacin de un objeto

hasta que sea realmente necesario.

q

Ej.: al abrir un documento, no abrir las imgenes que no sean

visibles.
Aplicabilidad.

Cuando hay necesidad de una referencia a un objeto ms

flexible o sofisticada que un puntero.

Proxy Remoto: un representante para un objeto que se

encuentra en otro espacio de direcciones.

Proxy Virtual: Crea objetos costosos por encargo (ej.:

I

P

)

ImageProxy).

Proxy de Proteccin: Controla el acceso al objeto original

(permisos de acceso).

Referencia inteligente: sustituto de un puntero, que lleva a

cabo operaciones adicionales cuando se accede a un objeto

(ver ejemplo operadores C++):

C t

l

d

f

i

Contar el nmero de referencias.

Cargar un objeto persistente en memoria.

Bloquear el objeto cuando se accede a l (no modificacin

concurrente)

72

concurrente)
Participantes.

Proxy.

Mantiene una referencia que permite al proxy acceder al objeto real.

Proporciona una interfaz igual que la del sujeto real.

Controla el acceso al sujeto real, y puede ser responsable de crearlo y

borrarlo.

Otras responsabilidades, dependen del tipo de proxy:

Proxy Remoto: codifican las peticiones y se las mandan al sujeto

Proxy Remoto: codifican las peticiones, y se las mandan al sujeto.

Proxy virtual: Puede guardar informacin adicional sobre el sujeto, para

retardar el acceso al mismo.

Proxy de proteccin: comprueba que el llamador tiene permiso para

realizar la peticin

realizar la peticin.

Subject.

Define una interfaz comn para el RealSubject y el Proxy, de tal

manera que el Proxy se puede usan en vez del RealSubject

manera que el Proxy se puede usan en vez del RealSubject.

RealSubject.

Define el objeto real que el proxy representa.

Colaboraciones
74

Colaboraciones.

El proxy redirige peticiones al sujeto real cuando sea necesario,

dependiendo del tipo de proxy.
PROXY
En la clase User, que ser la clase padre, creamos su
constructor y todas funciones del tipo abstract con
el fin de obligar a las clases hijas a reutilizarlas, tal
como lo indica el patrn Proxy.

PROXY
En la clase ProxyUser utilizamos las funciones
saveUser() y fetchAll(), segn el tipo de usuario que
sea, del siguiente modo:
PROXY
Como podemos ver la clase ProxyUser tiene un
atributo llamado typeUser, con el cual definimos
cul de las otras dos clases hijas (UserAdmin,
UserGeneric) usaremos.
PROXY
Al momento de querer instanciar un UserAdmin o User
Generic, solo debemos instanciar el ProxyUser, y definir
su atributo typeUser, con lo cual podremos realizar las
funciones saveUser() y fetchAll(), segn el tipo de
usuario definido.
Bsicamente hemos usado el patrn proxy como
intermedio entre las clases UserAdmin y UserGeneric
mediante ProxyUser, hemos usado la funcin
saveUser() y fetchAll() de modo diferente en las tres
clases, en las dos primeras como medio de insercin y
extraccin de datos referente a su tipo; mientras que
en ProxyUser definimos esas mismas funciones pero con
el fin de direccionar el obejto adecuado segn el valor
que indique el atributo typeUser de la clase ProxyUser.
Decorador
Es un patrn de diseo estructural que nos permite
aadir comportamientos nuevos, o adicionales, a un
objeto en tiempo de ejecucin, dependiendo de la
situacin.
Decorador
Motivacin.
El objetivo es hacerlo de tal manera que las funciones
extendidas se puedan aplicar a un caso concreto y, al
mismo tiempo, mantener la posibilidad de crear una
instancia original que no tienen las nuevas funciones.
Tambin permite combinar mltiples decoradores a
una instancia, por lo que no hay que trabajar con un
decorador para cada instancia. Este patrn es una
alternativa a la subclase, la cual crea una clase que
hereda funcionalidad de una clase padre.
A diferencia de la subclase, que aade el compor-
tamiento en tiempo de compilacin, este patrn nos
permite agregar un nuevo comportamiento en tiempo
de ejecucin, si la situacin as lo requiere.
Decorador
Implementacin.

Para implementar el patrn Decorator, debemos seguir los
siguientes pasos:
Crear una subclase de la clase original Component en una
clase Decorator
En la clase Decorator, debemos aadir un Puntero a
Component como un campo
Pasar un Component al constructor de Decorator para
inicializar el puntero Component
En la clase Decorator, redirigir todos los metodos Component
al puntero Component, y
En la clase Decorator, sobreescribir cualquier mtodo
Component cuyo comportamiento deba ser modificado
.
Decorador
Cundo puedo usarlo?



El mejor lugar para usar el patrn Decorator es
cuando tenemos una entidad que necesita tener un
nuevo comportamiento slo si la situacin as lo
requiere. Por ejemplo, tenemos un elemento enlace
HTML, un enlace para cerrar sesin, que queremos
realice cosas diferentes basados en la pgina en la
que aparece. Para ello, podemos usar el patrn
decorador.
Decorador
Primero, definimos las diferentes decoraciones que
necesitaremos.
Si estamos en la portada como usuarios loggeados,
tener el enlace dentro de etiquetas <H2>.
Si estamos en una pgina distinta como usuarios
loggeados, tener un enlace con subrayado.
Si estamos loggeados, tener un enlace dentro de
etiquetas <strong>.
ADAPTADOR (Adapter Pattern)
Motivacin.
Otro trmino para hacer referencia a una clase
adaptador es un wrapper o contenedor, lo que
bsicamente nos permite envolver (wrapp)
acciones en una clase y reusar estas acciones en
las situaciones adecuadas.
Un ejemplo clsico puede ser cuando creas una
clase dominio para las clases de tabla. En lugar
de llamar a las diferentes clases de tabla y llamar
a sus funciones una por una, podemos
encapsular todos estos mtodos en un mtodo
que utilice una clase adaptador. Esto no slo nos
permitir reutilizar cualquier accin que se desee,
sino tambin evitar que tengamos que reescribir
el cdigo si necesitamos usar la misma accin en
un sitio distinto.
ADAPTADOR (Adapter Pattern)
Estructura
.
Otro trmino para hacer referencia a una clase
adaptador es un wrapper o contenedor, lo que
bsicamente nos permite envolver (wrapp)
acciones en una clase y reusar estas acciones en
las situaciones adecuadas.
Un ejemplo clsico puede ser cuando creas una
clase dominio para las clases de tabla. En lugar
de llamar a las diferentes clases de tabla y llamar
a sus funciones una por una, podemos
encapsular todos estos mtodos en un mtodo
que utilice una clase adaptador. Esto no slo nos
permitir reutilizar cualquier accin que se desee,
sino tambin evitar que tengamos que reescribir
el cdigo si necesitamos usar la misma accin en
un sitio distinto.
ADAPTADOR (Adapter Pattern)
Participantes
Target define la interfaz especfica del
dominio que Client usa.
Client colabora con la conformacin de
objetos para la interfaz Target.
Adaptee define una interfaz existente que
necesita adaptarse
Adapter adapta la interfaz de Adaptee a
la interfaz Target
Colaboraciones
Client llama a las operaciones sobre una
instancia Adapter. De hecho, el
adaptador llama a las operaciones de
Adaptee que llevan a cabo el pedido.

ADAPTADOR (Adapter Pattern)
Consecuencias
los adaptadores de clase y objetos
tienen diferentes trade-off
Un adaptador de clase:
Adapta Adaptee a Target encargando
a una clase Adaptee concreta. Como
consecuencia, una clase adaptadora
no funcionar cuando se desea
adaptar una clase y todas sus subclases.
Permite a los Adapter sobrescribir algo
de comportamiento de Adaptee, ya
que Adapter es una subclase de
Adaptee.

ADAPTADOR (Adapter Pattern)
Un adaptador de objeto:
Permite que un nico Adapter trabaje
con muchos Adaptees, es decir, el
Adapter por s mismo y las subclases (si
es que la tiene). El Adapter tambin
puede agregar funcionalidad a todos
los Adaptees de una sola vez.
Hace difcil sobrescribir el
comportamiento de Adaptee. Esto
requerir derivar Adaptee y hacer que
Adapter se refiera a la subclase en lugar
que al Adaptee por s mismo.

ADAPTADOR (Adapter Pattern)
Aqu hay otras cuestiones a considerar cuando se utiliza el
patrn Adapter:
Cuanta adaptacin hace el Adapter? Adapter vara
en la cantidad de trabajo que hace para adaptar
Adaptee a la interfaz Target. Hay un espectro de trabajo
posible, desde una simple conversin (por ejemplo,
cambiando los nombres de las operaciones) hasta
soportando un conjunto de operaciones enteramente
diferentes. La cantidad de trabajo que Adapter hace
depende de cuanto de similar tienen la interfaz Target
con Adaptee.
Adaptadores Pluggables Una clase es ms reusable
cuando se minimiza la suposicin de que otras clases
deben utilizarla. Mediante la construccin en una clase
de la adaptacin de una interfaz, se elimina la
suposicin de que otras clases ven la misma interfaz.
Dicho de otra manera, la adaptacin de la interfaz nos
permite incorporar a nuestra clase en sistemas existentes
que pueden esperar diferentes interfaces de la misma.
ADAPTADOR (Adapter Pattern)
Enfoque sin adaptador
<?php
$user = new User();
$user->CreateOrUpdate( //inputs );

$profile = new Profile();
$profile->CreateOrUpdate( //inputs );
?>
Si necesitamos hacer lo mismo en un lugar diferente,
o incluso reusar este cdigo en un proyecto distinto,
tendramos que reescribir todo otra vez.
ADAPTADOR (Adapter Pattern)
Enfoque con adaptador
<?php
$account_domain = new Account();
$account_domain->NewAccount( //inputs );
?>

En esta situacin, tenemos una clase wrapper, la
cual podra ser nuestra clase dominio Account.
ADAPTADOR (Adapter Pattern)
<?php
class Account()
{
public function NewAccount( //inputs )
{
$user = new User();
$user->CreateOrUpdate( //subset of inputs );

$profile = new Profile();
$profile->CreateOrUpdate( //subset of inputs );
}
}
?>
De esta forma, podemos usar la clase dominio
Account siempre que la necesitemos, adems de
poder englobar otras clases bajo la clase dominio.

También podría gustarte