<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Wladimir A. Jimenez B. &#187; Patrones de Diseño</title>
	<atom:link href="http://www.kasbeel.cl/kas2008/category/ingenieria-de-software/patrones-de-diseno/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kasbeel.cl/kas2008</link>
	<description>Blog personal y tips de informatica.</description>
	<lastBuildDate>Mon, 08 Mar 2010 17:42:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Singleton (Instancia Única)</title>
		<link>http://www.kasbeel.cl/kas2008/2009/08/07/singleton-instancia-unica/</link>
		<comments>http://www.kasbeel.cl/kas2008/2009/08/07/singleton-instancia-unica/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 21:15:31 +0000</pubDate>
		<dc:creator>Wladimir A. Jimenez B.</dc:creator>
				<category><![CDATA[Creacionales]]></category>
		<category><![CDATA[Ingeniería de Software]]></category>
		<category><![CDATA[Patrones de Diseño]]></category>
		<category><![CDATA[Diseño de Clases]]></category>
		<category><![CDATA[Instancia Única]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Patrones]]></category>
		<category><![CDATA[Singleton]]></category>
		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://www.kasbeel.cl/kas2008/?p=83</guid>
		<description><![CDATA[Singleton (Instancia Única) es un patrón generalmente sencillo de implementar, es uno de los patrones de diseño mas comunes y usados.
Esta diseñado para mantener solo una instancia de la clase que lo utiliza y el propósito es asegurar que la clase mantenga solo una instancia y un único punto de acceso a esta.
Un punto importante <a href='http://www.kasbeel.cl/kas2008/2009/08/07/singleton-instancia-unica/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p><strong>Singleton </strong>(Instancia Única) es un patrón generalmente sencillo de implementar, es uno de los patrones de diseño mas comunes y usados.<br />
Esta diseñado para mantener solo una instancia de la clase que lo utiliza y el propósito es asegurar que la clase mantenga solo una instancia y un único punto de acceso a esta.<br />
Un punto importante a considerar es que al utilizar el patrón <strong>Singleton </strong>debemos asegurarnos de que la clase que lo implementara no mantenga estados, ya que esta será accedida por distintos clientes, y los estados de cada uno no necesariamente son iguales.<br />
<span id="more-83"></span><br />
<strong>Características</strong><br />
<em>1 .- Restricción al constructor</em><br />
Con esto conseguimos que sea imposible crear nuevas instancias.<br />
<em>2 .- Propiedad instancia</em><br />
El acceso a la instancia se realiza unicamente por este método o propiedad.</p>
<p><strong>Ventajas:</strong></p>
<li>Acceso controlado a una única instancia</li>
<li>No hay variables globales</li>
<li>Puede generalizarse</li>
<p></p>
<p><strong>Ejemplo Cotidiano:</strong><br />
Mas de alguno al utilizar algún Editor o Procesador de Texto, a requerido buscar una palabra en especial dentro del Texto, para esto por lo general precionamos (Ctrl-F)  y nos despliega un Dialogo solicitando el texto a buscar, por mucho que volvamos a presionar (Ctrl-F) no nos mostrará otro Dialogo, solo quedara el que estamos usando, a demás, si cerramos el Dialogo y lo volvemos a llamar nos mostrará el mismo que usamos la ves anterior. En síntesis existe solo una instancia del Dialogo, esto es algo similar a lo que haría un Patrón <strong>Singleton</strong>.</p>
<p><strong>Diagrama de Patrón Singleton</strong><br />
<center><img src="http://kasbeel.cl/kas2008/images/Singleton(DP).png" alt="Patron Singleton" /></center></p>
<p><strong>Implementaciones:</strong><br />
Existen variadas opciones de implantación para este patrón, aquí veremos algunas para algunos lenguajes.</p>
<li><strong>Instancia Sobre Demanda</strong></li>
<p>Como su nombre lo indica, la instancia se crea la primera ves que se intenta acceder al recurso, para acceder al método solo usaremos una instancia de la clase como veremos acontinuación.</em>.</p>
<p><em><strong>Java:</strong></em></p>
<pre class="brush:java">
// Transacripción directa de UML a JAVA
 public class Singleton {
      // Definimos el atributo que mantendrá la única instancia de esta clase
      static private Singleton instancia = null;
      // Se declara el constructor como privado, con esto no se creará un constructor por defecto publico.
      private Singleton() { }
      static public Singleton getInstancia() {

         if (instancia  == null) { // verificamos si esta vacía(no asignada) la instancia.
             instancia  = new Singleton(); // si es así creamos la nueva instancia.
         }
         return instancia; // retornamos la instancia activa.
     }
      // Métodos al que se accederá.
      public String metodo() {
         return "Proceso utilizando una única Instancia";
     }
  }

//// la llamada al método se puede realizar de las siguientes formas.
//// 1.- Singleton.getInstancia().metodo();
//// 2.- Definimos una variable.
////          Singleton instancia = Singleton.getInstancia();
////          instancia.metodo();
</pre>
<p><em><strong>C#:</strong></em></p>
<pre class="brush:csharp">
// Transacripción directa de UML a C#
class Singleton
{
     public static Singleton Instancia()
     {
        if (_instancia == null)
        {
                    _instancia = new Singleton();
        }
        return _instancia;
     }
      // Métodos al que se accederá.
      public String metodo() {
         return "Proceso utilizando una única Instancia";
     }

     // Se declara el constructor como privado, con esto no se creará un constructor por defecto publico.
     private Singleton()
     {
     }
     private static Singleton _instancia = null;
}
//// la llamada al método se puede realizar de las siguientes formas.
//// 1.- Singleton.Instancia().metodo();
//// 2.- Definimos una variable.
////          Singleton instancia = Singleton.Instancia();
////          instancia.metodo();
</pre>
<li><strong>Instancia Automática </strong></li>
<p>Utilizando este tipo de implementación nos ahorramos un validación, que en si no es mucho pero cualquier ahorro es valido, en especial si son varias las clases que lo implementan.</p>
<p><em><strong>Java:</strong></em></p>
<pre class="brush:java">
// Implementación Automática en JAVA
 public class Singleton {
     private static Singleton instancia= new Singleton();
     private Singleton() { }
     public static Singleton getInstancia() {
         return instancia;
     }
      // Métodos al que se accederá.
      public String metodo() {
         return "Proceso utilizando una única Instancia";
     }
  }
//// la llamada al método se puede realizar de las siguientes formas.
//// 1.- Singleton.getInstancia().metodo();
</pre>
<p><em><strong>C#:</strong></em></p>
<pre class="brush:csharp">
// Implementación Automática en C#
 public class Singleton {
     public Singleton Instancia() {
         return _instancia;
     }
      // Métodos al que se accederá.
      public String metodo() {
         return "Proceso utilizando una única Instancia";
     }
     private Singleton() { }
     private static Singleton _instancia = new Singleton();
  }
//// la llamada al método se puede realizar de las siguientes formas.
//// 1.- Singleton.Instancia().metodo();
</pre>
<li><strong>Sin Instancia</strong></li>
<p>Utilizando este tipo de implementación, simplemente declaramos los métodos estáticos.</p>
<p><em><strong>Java:</strong></em></p>
<pre class="brush:java">
// Implementación Automática en JAVA
 public class Singleton {
     private Singleton() { }
      // Métodos al que se accederá.
      public static String metodo() {
         return "Proceso Estático";
     }
  }
//// la llamada al método se puede realizar de las siguientes formas.
//// 1.- Singleton.metodo();
</pre>
<p><em><strong>C#:</strong></em></p>
<pre class="brush:csharp">
// Implementación Automática en C#
 public class Singleton {
      // Métodos al que se accederá.
      public static String metodo() {
         return "Proceso Estático";
     }
     private Singleton() { }
  }
//// la llamada al método se puede realizar de las siguientes formas.
//// 1.- Singleton.metodo();
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.kasbeel.cl/kas2008/2009/08/07/singleton-instancia-unica/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
