Está en la página 1de 21

Aprendiz: Juan Camilo Hernández Prieto

Ficha: 254

Trabajo:

1. Para la siguiente captura realizar la siguiente investigación a los campos de texto que están
de color rojo:

(¿QUÉ ES?, UTILIDAD, ¿DÓNDE SE UTILIZA?, EJEMPLO EN JAVA.)


SINGLETON:

¿Qué es?

Conocido como instancia única, que permite restringir la creación de objetos pertenecientes a una
clase o el valor de un tipo a un único objeto.

Utilidad

Su intención es garantizar que una clase solo tenga una instancia y proporciona un punto de
acceso global.

¿Dónde se utiliza?

Se utiliza cuando por alguna razón se necesite que exista solo una instancia (un objeto) de una
determinada clase.

Dicha clase se creará de forma que tenga una propiedad estática y un constructor privado, así
como un método público estático que será el encargado de crear la instancia (cuando no exista) y
guardar una referencia a la misma en la propiedad estática (devolviendo ésta).

Ejemplo:
Al ejecutarlo siempre obtendremos lo siguiente:

EXPLICACIÓN:

Cada vez que se procesa el bucle for se realiza una llamada al método getInstancia() de la clase
Coche, devolviéndose siempre una misma instancia (un sólo objeto) de dicha clase (que será
creada la primera vez que se llame a dicho método).
FACTORY METHOD:

¿Qué es?

Consiste en utilizar una clase constructora abstracta con unos cuantos métodos definidos.

Utilidad

Su intención es que cuando definamos una clase a partir de la que se crearan objetos pero sin
saber de que tipo son, siendo otras subclases las encargadas de decidirlo.

¿Dónde se utiliza?

Ejemplo:
Al ejecutarlo obtendríamos como resultado:

EXPLICACIÓN:

 Creamos dos clases de tipo IArchivo así como la clase abstracta en la que se define el


método de fabricación, y otra que hereda de ella y lo implementa.

 En el programa principal se crea una instancia de la clase que implementa el método de


fabricación, el cual usaremos para crear y devolver los distintos tipos de objetos.

Una variante de la forma anterior es la siguiente:

ABSTRACT FACTORY:
¿Qué es?

Define una interfaz para crear todos los productos, pero deja la propia creación de productos para
las clases de fábrica concretas.

Utilidad

Este patrón resulta útil en casos en los que necesitemos crear familias de objetos relacionados o
dependientes entre sí, sin especificar sus clases concretas.

¿Dónde se utiliza?

Este patrón se puede aplicar cuando: Un sistema debe ser independiente de cómo sus objetos son
creados. ... Se necesita reforzar la noción de dependencia mutua entre ciertos objetos.
Ejemplo:
Al ejecutarlo obtendremos el siguiente resultado:
EXPLICACIÓN:

 En el programa principal creamos instancias de la clase Cliente, que se encarga de


obtener los componentes de la familia indicada y dibujarlos.

 La interfaz Componentes (la FabricaAbstracta) define los métodos que deberán tener las


clases que la implementen (de tipo FabricaConcreta), mediante los cuales devolverán los
componentes solicitados en cada caso.

 Asimismo las clases abstractas Botón y Lista (de tipo ProductoAbstracto) aparte de


implementar métodos comunes, definen otro método que deberán implementar las
clases que hereden de ellas (será en el que aplicaremos las diferencias entre los
componentes de ambas familias).

BRIDGE
¿Qué es?

Es patrón de diseño permite desacoplar una abstracción de su implementación, de manera que


ambas puedan variar de forma independiente.

Utilidad

Supongamos que tenemos una clase abstracta en la que se define un método que deberá
implementar cada clase que herede de ella: ¿cómo haríamos si una clase hija necesitase
implementarlo de forma que realizase acciones diferentes dependiendo de determinadas
circunstancias?

¿Dónde se utiliza?

En dichos casos nos resultaría útil el patrón Bridge (puente) ya que 'desacopla una abstracción' (un
método abstracto) al permitir indicar (durante la ejecución del programa) a una clase qué
'implementación' del mismo debe utilizar (qué acciones ha de realizar).
Ejemplo:

Al
ejecutarlo

obtendríamos como resultado:

COMPOSITE
Este útil patrón permite crear y manejar estructuras de objetos en forma de árbol, en las que un
objeto puede contener a otro(s).

En este punto cabe aclarar que las estructuras de este tipo se componen de nodos (un objeto que
a su vez contiene otros objetos) y Hojas (objetos que no contienen otros), y que ambos comparten
una misma Interfaz que define métodos que deben implementar.
Al ejecutarlo obtendríamos como resultado:
EXPLICACIÓN:

 Los archivos son hojas (no contienen otros elementos) y las carpetas


serían nodos (pueden contener archivos así como otras carpetas).

 Las clases Archivo y Carpeta heredan de la clase abstracta Nodo, que implementa los


métodos comunes y define el método mostrar() que deberán implementar.

 Dicho método en la clase Archivo abre el archivo para mostrar su contenido, y en la


clase Carpeta muestra su contenido de forma recursiva (si contiene otras carpetas
mostrará también lo que contienen).

 Al ejecutar el programa se crea una carpeta principal y se le agregarán objetos de


tipo Archivo así como otra subcarpeta que creamos posteriormente, y después
mostramos su contenido.

 A continuación eliminamos la subcarpeta y volvemos a mostrar el contenido de la principal

FACADE (FACHADA)
Este patrón nos permite acceder a un subsistema de forma más sencilla.
Para entenderlo mejor veamos un ejemplo sencillo en el que NO utilizaremos este patrón. Se
trata de simular el proceso a realizar para arrancar un coche.

EXPLICACIÓN:

Cómo puedes observar, en este caso el programa principal (Main) es el encargado de acceder a
cada uno de los objetos del subsistema creado con el objetivo de realizar el proceso de arrancar el
coche.

TEMPLATE METHOD
Este sencillo patrón resulta útil en casos en los que podamos implementar en una clase abstracta
el código común que será usado por las clases que heredan de ella, permitiéndoles que
implementen el comportamiento que varía mediante la reescritura (total o parcial) de
determinados métodos.

La diferencia con la forma común herencia y sobreescritura de los métodos abstractos estriba en
que la clase abstracta contiene un método denominado 'plantilla' que hace llamadas a los que han
de ser implementados por las clases que hereden de ella.

A continuación veremos un ejemplo en el que utilizamos este patrón de diseño.

Al ejecutarlo obtendríamos como resultado:


EXPLICACIÓN:

 En ClaseAbstracta se define el método plantilla obtener(), desde el que se llama a dos


métodos definidos como abstractos (que serán implementados por las subclases).

 En ClaseConcreta1 se implementan dichos métodos de forma que uno de ellos devuelve el


número entero recibido como parámetro multiplicado por 100, y otro agregándole 10.

 En ClaseConcreta2 se implementan de modo que lo devuelven multiplicado por 1000 y


agregándole 100, respectivamente.

En ciertos casos será necesario que algunas subclases sobrescriban determinados métodos de la
clase padre para agregar determinadas funcionalidades.

Strategy
Podemos hacer uso de este patrón para crear un objeto que pueda comportarse de formas
diferentes (lo cual se definirá en el momento de su instanciación o creación).
Al ejecutarlo obtendríamos como resultado:

EXPLICACIÓN:

 Se crea la interface IAritmetica, en la que definimos el método que deberán contener las


clases que la implementen.

 La clase OperacionAritmetica contiene una referencia a un objeto de tipo IAritmetica,


para así poder utilizarlo cuando sea necesario.

 Al inicio del programa creamos tres instancias de OperacionAritmetica, indicando el


comportamiento que deberá tener cada una de ellas.

 A continuación se realizan las operaciones y se muestra el resultado.

Command
Este patrón resulta útil en escenarios en los que se han de enviar peticiones a otros objetos
sin saber qué operación se ha de realizar, y ni tan siquiera quién es el receptor de dicha
petición.
Dicho de otro modo: tenemos varios objetos que realizan acciones similares de forma
diferente, y queremos que se procese la adecuada dependiendo del objeto solicitado.
El Invocador no sabe quién es el Receptor ni la acción que se realizará, tan sólo invoca
un Comando que ejecuta la acción adecuada:
Al ejecutarlo obtendríamos como resultado:

EXPLICACIÓN:

 Al inicio del programa creamos una instancia de la clase Menu (Invocador en el diagrama)


junto con otra de Receptor, y después tres elementos de menú (que
implementan IMenuItem) a los cuales pasamos la referencia del Receptor.

 A continuación agregamos las opciones al Menu (en el cual quedarán registradas para su


posterior acceso).

 Finalmente ejecutamos cada una de las opciones del menú.


Observer
El patrón Observer puede ser utilizado cuando hay objetos que dependen de otro, necesitando ser
notificados en caso de que se produzca algún cambio en él.

Se utilizarán los métodos agregarObservador() y quitarObservador() de la clase


abstracta UnObservado para registrar en una lista qué objetos de tipo UnObservador deberán ser
notificados o dejar de serlo cuando se produzca algún cambio en él (en tal caso recorrerá dicha
lista para enviar una notificación a cada uno de ellos).

El mensaje será enviado a UnObservador (que implementa la interface IObservador) utilizando su


método observadoActualizado().

Veamos a continuación un ejemplo sencillo en lenguaje Java en el cual cuando se produce un


cambio en el observado éste envía una notificación a los observadores, que simplemente
mostrarán un mensaje al recibirla.
Al ejecutarlo obtendríamos como resultado:

EXPLICACIÓN:

 Al inicio del programa se crea el objeto que será observado así como tres objetos
observadores del anterior, que se agregan a la lista del observado.

 Cuando se produce un cambio en el observado (cuando se le agrega un nuevo observador)


éste envía una notificación a los observadores (sin pasar ningún tipo de parámetro en este
ejemplo).

En este otro ejemplo mostramos una forma más recomendable de utilizar este patrón.
Referencias:

https://www.google.com/url?
sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwiI-8TD4-
7rAhVyu1kKHZk8A5QQtwIwAHoECAQQAQ&url=https%3A%2F%2Fdevexperto.com%2Fpatrones-
de-diseno-software%2F&usg=AOvVaw3ljy1gk5C1VZmHjx-PNERC

https://www.google.com/url?
sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwiI-8TD4-
7rAhVyu1kKHZk8A5QQFjABegQIAhAB&url=https%3A%2F%2Fes.wikipedia.org%2Fwiki%2FPatr
%25C3%25B3n_de_dise%25C3%25B1o&usg=AOvVaw07ZeCHkNzX02aEPtw6GoVv

https://www.google.com/url?
sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwiI-8TD4-
7rAhVyu1kKHZk8A5QQFjACegQIAxAB&url=https%3A%2F%2Fmedium.com%2Fall-you-need-is-
clean-code%2Fpatrones-de-dise%25C3%25B1o-
b7a99b8525e&usg=AOvVaw1FSJEZ88H11GAXpOrW5APb

https://www.google.com/url?
sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwiI-8TD4-
7rAhVyu1kKHZk8A5QQFjALegQIDhAB&url=https%3A%2F%2Finformaticapc.com%2Fpatrones-de-
diseno%2F&usg=AOvVaw39SBginemCNhPMCEbS7TRr

https://www.google.com/url?
sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwiI-8TD4-
7rAhVyu1kKHZk8A5QQFjAWegQICxAB&url=https%3A%2F%2Fprofile.es%2Fblog%2Fpatrones-de-
diseno-de-software%2F&usg=AOvVaw1XG-ETXY6G7MAH0pXumEyk

También podría gustarte