Vous êtes sur la page 1sur 11
s18n0'5 jemplo de Java Singleton (Parenes y ClassLoaders)- Arqatectura Java arquitecturajava BAY ord poi Ejemplo de Java Singleton (Patrones y ClassLoaders) por Cecilio Alvarez Caules sobre 2. en Java Como ya he comentado en varias ocasiones el conocimiento de los patrones de disefio es algo clave a la hora de abordar desarrollos y de solucionar problemas .Hoy voy a hablar un poco a detalle de uno de los patrones de diserio mas sencillo ,el patron Singleton . Este patrén de disefio se encarga de que una clase determinada unicamente pueda tener un Unico objeto.Normalmente una clase puede instanciar todos los objetos que necesite. © @ © Sin embargo una clase que siga el patrén Singleton tiene la peculiaridad de que solo puede instanciar un nico objeto .Este tipo de clases son habituales en temas como configurar parametros generales de la aplicacién ya que una vez instanciado el objeto los valores se mantienen y son compartidos ip hwwrw arquilocturajava.comijomsto-de ave singllor-ptrones-classloacers) wm ‘1820's jemplo de Java Singleton (Parenes y ClassLoaders)-Arqutectura Java por toda la aplicacién. Vamos a configurar una clase con el patrén Singleton, a esta clase la llamaremos Configurador. Configurador Java Singleton Una vez que tenemos claro cual es el concepto de Configurador vamos a crearlo en cédigo .En este caso nuestro configurador almacenaré dos valores url, y base de datos que serén compartidos por el resto de Clases de la aplicacién. package com.arquitecturajava; public class Configurador { private String url; private String baseDatos; private static Configurador miconfigurador; public static Configurador getConfigurador(string url,String baseDatos) { Af (miconfigurador: null) { miconfigurador=new Configurador(url,baseDatos); + return miconfigurador; + private Configurador(String url, String baseDatos){ ‘this urleurl; ‘this. baseDatos=baseDatos; + public String geturl() { return url; 3 public void seturl(String url) { ‘this.url = url; 3 public String getBaseDatos() { return baseDatos; 3 public void setBaseDatos (String baseDatos) { ‘this.baseDatos = baseDatos; 3 } ip hwwrwarquilocturajava.comiejomslo-de ave singllor-ptrones-classloacers) ant ‘1820's Ejemplo de Java Singleton (Patrones y ClssLoaders) -Arqutectra Java Para conseguir que una clase sea de tipo Singleton necesitamos en primer lugar que su constructor sea privado. De esa forma ningiin programa sera capaz de construir objetos de esta tipo . En segundo lugar necesitaremos disponer de una variable estatica privada que almacene una referencia al objeto que vamos a crear a traves del constructor . Por ultimo un método estatico publico estatica, que se encarga de instanciar el objeto la primera vez y almacenarlo en la variable Configurador| Una vez aclarado como funciona un Singleton es muy sencillo utilizarle desde un programa ya que basta con invocar al método estaitico. 1 4 package com.arquitecturajava; public class Principal { public static void main(string{] args) { Configurador c= Configurador.getConfigurador("niurl", "mibaseDatos"); systen.out.println(c.geturl())5 System.out.printIn(c.getBaseDatos())5 + Singleton y ClassLoaders A veces los patrones pueden semos muy utiles y a veces pueden no serlo tanto y llevamos a situaciones problematicas . Por ejemplo si preguntamos lo siguiente . gE! patrén Singleton nos genera un Unico objeto para una clase Java? . La respuesta mas normal es “SI” sin embargo esta no es verdad del todo -La respuesta correcta es que el patron Singleton nos genera un objeto por cada clase cargada en el mismo ClassLoader. ;, Que quiere decir esto?. Pues quiere decir que por ejemplo dos aplicaciones web que cada una tiene su propio WebClassLoader tendran ip shwwnwarquiocturajava.comijomsto-deave-singllor-ptrones-classloacers) ant ‘1820's jemplo de Java Singleton (Parenes y ClassLoaders)-Arqutectura Java cada una so propia instancia. ‘Servidor Esto en principio no es problematico porque se encuentran aisladas . Ahora bien hay situaciones en las que un administrador de sistemas puede decidir compartir librerias y clases entre distintas aplicaciones. ip hwwrwarquilocturajava.comiejomslo-de ave singllor-ptrones-classloacers) ant ‘1820's Ejemplo de Java Singleton (Patrones y ClssLoaders) -Arqutectra Java En este caso si podemos tener problemas ya que el objeto Singleton que en principio fue disefiado para configurar una aplicacién concreta estar compartido por varias. Mucho ojo sobre como gestionamos este patron de disefio ya que facilmente causaré problema, ‘orado a Distancia 4 Doctorado a distancia Estudios universitarios a distancia e ox > Subscribe Siguenos en Linkedin y Twitter o subscribete al RSS. oo Related Posts: éQué es un Microservicio? Entiendo los métodos de Java equals y hashcode Java 8 Date Time API Java wait notify y threads Usando el patron factory @ Design Patterns, Java € Spring Security (1) configuracion éQue es big data? (CantabriaT! 13 Responses to Ejemplo de Java Singleton (Patrones y ClassLoaders) =, | Mintakastar 24 marzo, 2014 at 18:30 # a Muy claro el patron Singleton ! Ce ip hwwrwarquiocturajava.comiejomsto-de ave singllor-patrones-classloacers) sit ‘1820's jemplo de Java Singleton (Parenes y ClassLoaders)-Arqutectura Java =, | Cecilio Alvarez Caules 24 marzo, 2014 at 20:04 # b gracias |p) fot =) | David 1 abri, 2014 at 10:33 # Muy buen ejemplo y explicado de forma clara y concisa como siempre. Solo una cosa, al método getConfigurador le falta la palabra clave “static”, Enhorabuena por el blog! =, | Cecilio Alvarez Caules 1 abril, 2014 at 13:18 # b gracias lo correguire |p) Ce "GO 7 abril, 2014 at 16:17 # Cecilio, al getInstance le falta la sincronizacién para asegurar que realmente sea una Unica instancia (y dependiendo de lo que uno quiera hacer hasta se le pueden poner 2 puntos de sincronizacién) Saludos fot =, | diego 7 abril, 2014 at 16:18 & puse getlnstance y es getConfigurador fa =, | Cecilio Alvarez Caules 8 abri, 2014 at 22:45 # z tp wr arqtecrsjava.conleerto-de-jave-snglapatrones-clssloaces! ett ‘1820's Ejemplo de Java Singleton (Parenes y ClssLoaders)-Arqutectura Java a Ge Ceci o Alvarez Caules 7 abril, 2014 at 20:35 # b. Si en el caso de que cuando se construya el singleton varios thread pudieran acceder a el podriamos tener problemas de sincronismo :). Prefiero dejarlo asi por simplicidad pero gracias por el aporte Ct =, | Pablo 29 julio, 2016 at 14:27 Un detalle respecto al patrén Singleton, un poco ya a mas bajo nivel Como comenta Josua Bloch en su libro Effective Java, la mejor forma de implementar este patrén es utilizando un Enum (aunque sea un idiom bastante desconocido). Un enum te proporciona directamente Thread Safety y serializacién, mientras que la alternativa de declarar un constructor privado y usar un getinstance() puede presentar problemas en entornos concurrentes (habria que aplicar double checked locking) y en casos de serializacién/deserializacién, Por ultimo, comentar que si bien el patrén Singleton es uno de los mas conocidos, desde hace algtin tiempo existen corrientes que lo definen como un antipatrén, ya que argumentan algunas contrapartidas: se esté compartiendo un estado global a lo largo de toda la aplicacién (violando principios de encapsulamiento y alta cohesion/bajo acoplamiento) y ademis dificulta la realizacién de test con mocks. Un saludo ft =, Ceci a Alvarez Caules 29 julio, 2014 at 15:05 # Gracias por el aporte :). Tienes mucha razén Ce =, | Felipe Rodriguez 30 noviembre, 2014 at 14:50 # Bz ip hwarwarquiocturajava.comijomsto-de ava singllon-patrones-classloacers) am si2a0%5 Ejemplo de Java Singleton (Parenes y ClssLoaders)-Arqutectura Java Excelente ejemplo, quedo claro en la primera lectura . Gracias Ce Cecilio Alvarez Caules 30 noviembre, — 014 at 21:08 # b me alegro te haya sido util |p) Trackbacks/Pingbacks Usando el patron factory - Arquitectura Java - 17 noviembre, 2014 [..] articulos relacionados: Singleton , [...] Deja un comentario Name (required) Email (will not be published) (required) Website Buscar Search. Q ipdhwwwarquiecturajava.comieemalo-de-ava-sirgelon-ptranes-classloacers! an ‘1820's jemplo de Java Singleton (Parenes y ClassLoaders)-Arqutectura Java AVAST Antivirus Gratis 100% seguro, gratis y facil de usar Ultima version 2015 aqui. POPULAR | COMMENTS Libro: Arguitecturas Web y Angular js @ sseprieware, 2016 _. | Usando Java Session en aplicaciones web (et | ssoctuare, 2014 2Cuales son las certificaciones Java? 16 ENERO, 2015 ‘Spring Anotaciones vs XML 1B AGOSTO, 2014 Java y MongoDB 11 NOVIEMBRE, 2014 Twitter Tweets por @arquitectojava Categorias Bases de Datos (11) Nosal. (6) genbotadev (3) HTMLS (42) ip hwwrwarquilocturajava.comiejomslo-de ave singllor-ptrones-classloacers) an ‘1820's Ejemplo de Java Singleton (Patrones y ClssLoaders) -Arqutectra Java JavaScript (19) Angular (1) Mvc (2) JQuery (11) JSON (4) ava (56) Eclipse (6) Java Basico (12) Maven (9) P00 (5) JEE (74) vB (11) Java Web (26) UPA (14) Servicios Web (6) Mobile (17) Android (7) Sin categoria (10) Spring (19) Spring MVC (6) Spring Security (2) Web (1) Translate Seleccionar idioma |v Con ja tecnologia de Google Traduetor Redes Sociales Siguenos en Linkedin y Twitter o subscribete al RSS. Email ae NH Contacto contacto @arquitecturajava.com ip hwwrwarquilocturajava.comiejomslo-de ave singllor-ptrones-classloacers) son ‘1820's jemplo de Java Singleton (Parenes y ClassLoaders)-Arqutectura Java 2015 Arquitectura Java. All Rights Reserved. Disefiado por Clickea Soluciones Web ip hwwrw arquiocturajava.comijomslo-deave-singllor-ptrones-classloacers! awit

Vous aimerez peut-être aussi