jueves, 28 de abril de 2016
Patrón Singlenton
Resumen:
El Patrón singleton es un patrón de creación especialmente útil cuando se requiere que una clase solo tenga una única instancia dentro de toda la aplicación, es bastante sencillo y se basa en tres pasos :
1. creamos la clase, y declaramos su constructor como privado (para evitar que pueda ser instan ciada).
2. creamos una variable estática del tipo de la clase creada.
3. creamos un método estático que nos verifique mediante un condicional, si la variable anterior ya tiene asignada una instancia, y la retornamos. de lo contrario se crea una nueva instancia, se almacena en dicha variable y se retorna.
Presentación
Ejemplo Código Fuente
domingo, 24 de abril de 2016
Patrón Adapter
DESCRIPCIÓN
El objetivo del patrón Adapter es convertir la interfaz de una clase existente en la interfaz esperada por los clientes también existentes de modo que puedan trabajar de manera conjunta. Se trata de conferir a una clase existente una nueva interfaz para responder a las necesidades de los clientes.
EJEMPLO
El servidor web del sistema de venta de vehículos crea y administra los documentos
destinados a los clientes. La interfaz Documento se ha definido para realizar
esta gestión. La figura 10.1 muestra su
representación UML así
como los tres métodos setContenido,
dibuja e imprime. Se ha realizado
una primera clase de implementación
de esta interfaz:
la
clase DocumentoHtml que implementa
estos tres métodos. Los objetos clientes de
esta interfaz y esta clase cliente ya se han diseñado.
Por
otro lado, la agregación
de documentos PDF supone un problema, pues se trata de documentos
más complejos
de construir y de administrar que los
documentos HTML. Para ello
se ha escogido un
producto del mercado, aunque
su interfaz no se
corresponde con
la interfaz Documento. La figura 10.1
muestra el componente ComponentePdf cuya interfaz incluye más
métodos y la
nomenclatura es bien
diferente (con el prefijo
pdf).
El patrón Adapter proporciona una
solución que consiste
en crear la clase DocumentoPdf que
implemente la interfaz Documento y posea una asociación
con ComponentePdf. La implementación
de los tres métodos de la interfaz Documento
consiste en delegar
correctamente
las llamadas
al
componente PDF. Esta solución
se muestra en la figura 10.1, el código
de
los métodos se detalla con ayuda de notas.
Figura 10.1 - El
patrón Adapter aplicado a un
componente de
documentos PDF.
2. Participantes
Los
participantes del patrón
son los siguientes:
· Interfaz (Documento)
incluye la firma
de los métodos del
objeto.
· Cliente (ServidorWeb)
interactúa con
los objetos respondiendo a la interfaz Interfaz.
· Adaptador (DocumentoPdf)
implementa los métodos de
la interfaz
Interfaz invocando a los métodos
del objeto adaptado.
· Adaptado
(ComponentePdf) incluye el
objeto cuya interfaz ha sido
adaptada para corresponder
a la interfaz Interfaz.
3. Colaboraciones
El cliente invoca el
método solicitud del
adaptador que, en consecuencia, interactúa con el
objeto
adaptado invocando el método realiza. La figura 10.3
ilustra estas colaboraciones.
DOMINIOS DE APLICACIÓN
El patrón se utiliza en
los siguientes casos:
· Para integrar
en el
sistema un objeto cuya interfaz no se
corresponde con la interfaz requerida en el
interior
de este sistema.
· Para proveer interfaces múltiples a
un objeto en su etapa de diseño.
EJEMPLO EN JAVA
A continuación
presentamos
el código del ejemplo
escrito en Java. Descargue aquí
Comenzamos por la interfaz Documento:
La clase DocumentoHtml es el
ejemplo de clase que implementa
la interfaz Documento.
La clase ComponentePdf representa el
componente existente que
se quiere integrar en
la aplicación.
Su diseño es independiente de la aplicación y, en
particular, de la interfaz Documento.
Esta clase tendrá que adaptarse a continuación.
La clase DocumentoPdf representa el adaptador.
Está asociada a la clase ComponentePdf mediante el
atributo herramientaPdf que se asocia con el objeto adaptado.
Implementa la interfaz Documento y cada uno de
sus métodos invoca a los métodos necesarios del
objeto
adaptado para realizar la adaptación entre ambas
interfaces.
El programa
principal se
corresponde con la clase Adapter que
crea un documento
HTML, fija el contenido y a continuación
lo dibuja.
A continuación,
el programa realiza las
mismas acciones con un documento PDF.
viernes, 22 de abril de 2016
Patron Estrategia
Patrón Estrategia
Definición:
•Es
un patrón de diseño de comportamiento, que encapsula algoritmos en
clases,permitiendo que sean reutilizados e intercambiables. En base a un parámetro,
que
puede se cualquier objeto, permite a una aplicación decidir en tiempo de
ejecución el
algoritmo que debe ejecutar.
•Busca
desacoplar bifurcaciones inmensas con algoritmos dificultosos según el cambio
elegido.
¿Cuando debo usarlo?
•Un
programa tiene que proporcionar múltiples variantes de un algoritmo o
comportamiento.
•Es
posible encapsular las variantes de comportamiento en clases separadas que
proporcionan un modo consistente de acceder a los comportamientos.
•Permite
cambiar o agregar algoritmos, independientemente de la clase que lo utiliza.
Estructura
Ejemplo
Imaginemos
una biblioteca de un instituto educativo que presta libros a los alumnos y
profesores. Los
alumnos pueden
asociarse a la biblioteca pagando una mensualidad. Con lo cual un libro puede
ser prestado a Alumnos, Socios y Profesores.
Por decisión de la administración, a los socios se les prestará el libro más nuevo, luego aquel que se encuentre en buen estado y, por último, aquel que estuviese en estado regular.
En cambio, si un Alumno pide un libro, ocurre todo lo contrario. Por último, a los profesores intentarán otorgargarles libros buenos, luego los recién comprados y, por último, los regulares. Este caso es ideal para el patrón Strategy, ya que dependiendo de un parámetro (el tipo de persona a la que se le presta el libro) puede realizar una búsqueda con distintos algoritmos
Por decisión de la administración, a los socios se les prestará el libro más nuevo, luego aquel que se encuentre en buen estado y, por último, aquel que estuviese en estado regular.
En cambio, si un Alumno pide un libro, ocurre todo lo contrario. Por último, a los profesores intentarán otorgargarles libros buenos, luego los recién comprados y, por último, los regulares. Este caso es ideal para el patrón Strategy, ya que dependiendo de un parámetro (el tipo de persona a la que se le presta el libro) puede realizar una búsqueda con distintos algoritmos
Comenzaremos por la clase persona:
La clase Profesor:
La clase Estudiante:
La clase Socio:
Nuestra Interface que encapsula las estrategias:
Y las estrategias concretas:
Primera:
Segunda:
Tercera:
Necesitaremos una Factoría que cree los diferentes objetos de las estregias según sea la intancia:
y por ultimo nuestro Main:
Consecuencias:
•Permite que los comportamientos de los Clientes sean determinados dinámicamente
sobre un objeto base.
•Simplifica los Clientes: les reduce responsabilidad para seleccionar
comportamientos o implementaciones de comportamientos alternativos. Esto
simplifica el código de los objetos Cliente eliminando las expresiones if y switch.
•En algunos casos, esto puede incrementar también la velocidad de los
objetos Cliente porque ellos no necesitan perder tiempo seleccionado un
comportamiento.
Patron Builder
Patron Builder
Definicion:
±El
objetivo del patrón Builder es abstraer la construcción de objetos complejos de
su implementación, de modo que un cliente pueda crear objetos complejos sin
tener que preocuparse de las diferencias en su implantación.
±el patrón Builder es un patrón creacional
cuyo objetivo es instanciar objetos complejos que generalmente
están compuestos por varios elementos y que admiten diversas
configuraciones.
Cuando hablamos de “construcción” nos referimos al proceso, mientras que cuando
hablamos de “representación” nos estaremos refiriendo a los datos que componen
el objeto.
Ejemplo:
En la creación de un automóvil podríamos utilizar el patrón builder. Necesitaremos una fabrica que se encargue de la lógica del armado de los diferentes vehículos.
Comenzaremos con la clase Auto.
Por supuesto necesitaremos un motor, para componer nuestro automovil.
Tambien necesitaremos una interface que encapsule el comportamiento del automovil. y la logica del armado.
Tendremos 2 tipos de autos:
Comenzaremos con la clase Auto.
Un camaro:
y un focus:
Estas serán nuestras dos clases concretas.
El consecionario se encargará de la logica del armado del vehiculo, basandose en la interfaz builder. Este será nuestro Director Por ultimo, nuestro main sería :
C Consecuencias:
El Builder ofrece una interfaz al
Director para construir un producto y encapsula la representación interna del
producto y cómo se juntan sus partes.
Separa el código de construcción del de
representación.
Las clases que definen la
representación interna del producto no aparecen en la interfaz del Builder.
Cada ConcreteBuilder contiene el código para crear y
juntar una clase específica de producto.
Da mayor control en el proceso de
construcción.
Permite que el Director controle la
construcción de un producto paso a paso.
Sólo cuando el producto está
acabado lo recupera el director del builder.
Suscribirse a:
Entradas (Atom)