Mechasoft: Blog de Matías J. Magni

…dedicado al Open Source y al delirio del Autor…

  • Matías J. Magni

  • RSS Ubuntu

    • Decreasing the complexity of IoT adoption with Edge as a Service model 23/05/2018
        Last week, much of the IoT industry descended on Santa Clara, California, for the annual IoT World trade show. One of the exhibitors present were Rigado who Canonical partnered with earlier this year to deploy Ubuntu Core on their IoT gateways primarily targeted at commercial applications such as smart lighting and asset tracking. Rigado […]
    • Canonical Managed Cloud adds data protection and recovery with Trilio 22/05/2018
      Canonical BootStack and Ubuntu Advantage customers now can access TrilioVault OpenStack Vancouver: – May 22, 2018 – Canonical and Trilio announced today a partnership agreement to deliver TrilioVault backup and recovery solutions as part of BootStack, Canonical’s fully managed OpenStack private cloud solution. TrilioVault will also be made available as an op […]
    • Ubuntu Server development summary – 22 May 2018 22/05/2018
      Hello Ubuntu Server The purpose of this communication is to provide a status update and highlights for any interesting subjects from the Ubuntu Server Team. If you would like to reach the server team, you can find us at the #ubuntu-server channel on Freenode. Alternatively, you can sign up and use the Ubuntu Server Team […]
    • Offline Computing – 10 Apps for the Digital Nomad 22/05/2018
      In today’s always-connected, constantly-inturrupted world, it can often be rewarding to go offline. Disconnecting from the Internet doesn’t mean you have to buy a yurt, live on beans, and get no work done though! While there’s a ton of great apps in the Snap store which rely on a connection to function, there’s also a […]
    • Desktop plans for 18.10 18/05/2018
      Bionic is out the door and we’ve started the Cosmic cycle so I wanted to take this opportunity to tell you about our plans for this cycle, the sorts of features we want to work on and what you can expect from 18.10 when it arrives in October. Updates to 18.04 LTS We’ve set aside […]
  • RSS LUGMen

    • Se ha producido un error; es probable que la fuente esté fuera de servicio. Vuelve a intentarlo más tarde.
  • Archivos

  • Anuncios

Patrones de diseño

Patrón Singleton

  • Clasificación: patrón creacional.
  • Intención: el patrón Singleton es usado para representar un objeto en una situación donde sólo puede existir una única instancia de dicho objeto y proveer un punto de acceso global a él.
  • Motivación:
    • Algunas veces sólo queremos tener una sola instancia de una clase que exista en el sistema.
    • Necesitamos que esa instancia sea accesible fácilmente.
    • Y también nos queremos asegurar que más de una instancia de la clase no pueda ser creada.
  • Aplicabilidad:
    • Se necesita una sola instancia de una clase y debe ser accesible desde diferentes partes del sistema.
    • La única instancia debería ser extensible mediante herencia y los clientes deberían ser capaces de utilizar una instancia extendida sin modificar su código.
  • Estructura:
  • Clase Singleton

  • Participantes: La clase participante de este patrón es:
    • Singleton (LoadBalancer):
      • Define una operación instanciar que le permite a los usuarios acceder a su única instancia.
      • Es responsable de crear y mantener su única instancia.
        public class Singleton {
                private static Singleton instance = null;
                private Singleton() {}
                public static Singleton getInstance() {
                        if (instance == null) instance = new Singleton();
                        return instance;
                }
        }
  • Colaboraciones: Los clientes acceden a la instancia única a través del método Instancia del Singleton.
  • Implementación:
    • La clase se implementa de tal forma que sólo se pueda crear una instancia.
    • Se utiliza un método de clase (static) para ocultar la operación de creación para garantizar la creación de una instancia.
    • Este método tiene acceso a la variable que contiene la instancia y asegura que está inicializada antes de devolver el valor.
  • Consecuencias:
    • Se tiene un acceso controlado a la instancia única.
    • Espacio de nombres reducido. Es una mejora de las variables globales, con lo que evita tener estas variables guardando casos únicos.
    • Permite el refinamiento de operaciones y la representación.
    • Permite un número variable de instancias.
    • Tendencia a abusar en su utilización, por su sencillez, en casos en los que no hace falta.
    • Puede resultar difícil crear una subclase de un Singleton, ya que esto sólo puede funcionar si la clase base Singleton no ha sido todavía instanciada.
    • Se puede cambiar fácilmente el código de un Singleton para permitir un pequeño número de instancias, siempre y cuando esté pertmitido y tenga sentido.
  • Usos conocidos:
    • Clases para almacenar atributos de sesión.
    • Parámetros de la base de datos.
    • Dispositivos de visualización.
    • Gestores de ventana, administrador de tareas, etc.
  • Patrones relacionados:
    • Abstract Factory: usado a menudo para retornar objetos únicos.
    • Builder: usado para construir un objeto complejo, donde un singleton cumple la función de crear un objeto de acceso global.
    • Prototype: usado para copiar un objeto o crearlo desde su prototipo, donde un singleton asegura que sólo un prototipo está garantizado.
  • Problemas:
    • La instrumentación del patrón puede ser delicada en programas con múltiples hilos de ejecución.
    • Si 2 hilos de ejecución intentan crear la instancia al mismo tiempo y esta no existe todavía, sólo uno de ellos debe lograr crear el objeto.
    • La solución clásica para este problema es utilizar exclusión mutua en el método de creación de la clase que implementa el patrón.

Problema en ambientes multithread:

Solución:
Para evitar que 2 o más hilos intenten instanciar la clase vamos a hacer que el método que nos devuelve la instancia de la clase esté sincronizado, esto lo hacemos mediante la palabra reservada “synchronized”. Ya prodemos estar seguros que solamente un solo hilo podrá instanciar a la clase Singleton.

public class Singleton {
    private static Singleton instance = null;
    private Singleton() {}
    public synchronized static Singleton getInstance() {
        if(instance == null) instance = new Singleton();
        else System.out.println("No se puede seguir instanciando la clase Singleton");
        return instance;
    }
}

Patrón Builder

Anuncios

Una respuesta to “Patrones de diseño”

  1. gatoX said

    mecha muy buenos che… mañana rindo yo con el alberto COMPOSITE si queres te paso el tutorial, el video y lo subiz
    salu2

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s

 
A %d blogueros les gusta esto: