Facade - Singleton
Facade - Singleton
Facade - Singleton
Patrones de diseño
Los desarrolladores no siempre tienen que encarar aplicaciones a partir de cero, muchas
tareas y acciones se repiten en diversas formas a lo largo de cada problema, permitiendo reutilizar
metodologías de trabajo anteriores. Los Patrones forman una base para la producción de
soluciones a los temas recurrentes en los grandes desarrollos. Cada patrón registra una manera de
resolver un problema, incluyendo cómo reconocer la presencia del mismo y cómo generar la
solución para que se ajuste al contexto. Los patrones conducen naturalmente uno al otro,
formando una especie de tela flexible de las decisiones que pueden resolver problemas a gran
escala.
Christopher Alexander (1977): “Cada patrón describe un problema que ocurre una y otra
vez en nuestro entorno, y describe la esencia de la solución a ese problema, de tal modo que pueda
utilizarse esta solución un millón de veces más, sin siquiera hacerlo de la misma manera dos veces”.
1- Patrones estructurales:
a. Composite.
b. Facade.
2- Patrones de comportamiento:
a. State.
b. Observer.
3- Patrones creacionales:
a. Singleton.
Página 1
Patrón Facade (Fachada):
El patrón de Facade proporciona una interfaz unificada a un conjunto de interfaces de un subsistema. Esta
interfaz es de alto nivel y hace que el subsistema sea más fácil de usar. De esta manera se envuelve un
subsistema complicado con una interfaz más sencilla.
1. Facade: Clase que se transforma en el nexo entre el/los cliente/s y las clases que componen al
subsistema.
2. Subsistema: Son las clases que implementan la funcionalidad. Estás realizan el trabajo solicitado por
el Facade, sin conocerlo en verdad.
3. Cliente: Es el componente que realiza las peticiones al Facade
Problema:
Un Sistema en Subsistemas facilita el diseño y el mantenimiento, pero puede ocurrir que existan
dependencias entre los subsistemas, como muestra la siguiente figura:
Cuando los subsistemas se vuelven complejos y existen muchas dependencias entre los clientes y los
subsistemas que implementan, se diseña una Facade para minimizar el acoplamiento de los clientes y el
subsistema, logrando así independencia y la portabilidad.
Podemos diseñar nuestro sistema en capas y proporcionar una interfaz Facade para definir un punto
de entrada en cada nivel logrando que se comuniquen y cumpliendo el objetivo de minimizar las
dependencias. De este modo también se minimizan la comunicación y las dependencias entre subsistemas.
La interfaz Fachada se encarga de distribuir los servicios a los subsistemas.
Página 2
Este patrón define una interfaz unificada de nivel superior a un subsistema que hace que éste sea
más fácil de usar. Los consumidores se encuentran con una fachada del pedido y al realizar una petición
reciben una interfaz de algún componente del subsistema.
Estructura:
Conclusiones:
1. Los clientes no ven los componentes del subsistema, minimizando la cantidad de objetos que se
relacionan con el cliente lo que facilita el uso del subsistema.
2. Reduce el acoplamiento entre los clientes y el subsistema.
3. No presenta la limitación que las aplicaciones utilicen clases del subtema en caso que sea necesario,
pudiendo elegir la generalidad o facilidad de uso.
Página 3
Patrón Singleton (Único):
La idea del patrón es asegurar que una clase tenga sólo una instancia, y proporcionar un punto de acceso
global a ella. Hay que hacer a la clase de la instancia de objeto único responsable de la creación,
inicialización, el acceso y la aplicación. Se debe declarar la instancia como un miembro de datos estáticos
privado y proporcionar una función pública que encapsula todo el código de inicialización, y proporciona
acceso a la instancia. El cliente llama a la función de acceso (utilizando el nombre de la clase y el operador)
siempre que se requiera una referencia a la instancia única.
1. Singleton:
Clase que tiene el valor estático.
2. Consumidores: Clases que hacen uso de ese valor estático de la clase Singleton.
En el caso de ser necesario garantizar la creación de sólo una instancia de una clase y que los clientes
puedan acceder de cualquier lugar de acceso.
Estructura:
Conclusiones:
Página 4
Ejemplo:
package datos;
package test;
import datos.Empresa;
public class TestSingletonEmpresa {
public static void main(String[] args) {
System.out.println( "Objeto empresa");
Empresa empresa=Empresa.getInstanciaEmpresa( );
System.out.println( empresa.getNombre());
System.out.println( empresa.getEmail());
System.out.println( "Objeto empresa1");
Empresa empresa1=Empresa.getInstanciaEmpresa();
System.out.println( empresa1.getNombre());
System.out.println( empresa1.getEmail());
println("empresa.equals(empresa1)="+empresa.equals(empresa1));
System.out.
}
}
Página 5
Preguntas:
Referencias utilizadas:
https://sourcemaking.com/design_patterns
Página 6