Mechasoft: Blog de Matías J. Magni

…dedicado al Open Source y al delirio del Autor…

  • Matías J. Magni

  • RSS Ubuntu

    • Tutorial: Continuous delivery of snaps with Circle CI 19/01/2018
      Bullet-proof continuous delivery of software is crucial to the health of your community, more than a way to run manual tests, it also enables your early adopters to test code and give feedback on it as soon as it lands. You may be already using build.snapcraft.io to do so for snaps, but in some cases, […]
    • Canonical brings Slack to the snap ecosystem 18/01/2018
      The digital workspace will now be available to all Linux users London, UK – 18th January 2018 – Canonical, the company behind Ubuntu, today announced the first iteration of Slack as a snap, bringing collaboration to open source users. Slack is an enterprise software platform that allows teams and businesses of all sizes to communicate effectively. Slack work […]
    • Spectre Mitigation Updates Available for Testing in Ubuntu Proposed 17/01/2018
      Canonical holds Ubuntu to the highest standards of security and quality.  This week we published candidate Ubuntu kernels providing mitigation for CVE-2017-5715 and CVE-2017-5753 (ie, Spectre / Variants 1 & 2) to their respective -proposed pockets for Ubuntu 17.10 (Artful), 16.04 LTS (Xenial), and 14.04 LTS (Trusty).  We have also expanded mitigation to […]
    • LXD Weekly Status #30 16/01/2018
        Introduction The main highlight for this week was the inclusion of the new proxy device in LXD, thanks to the hard work of some University of Texas students! The rest of the time was spent fixing a number of bugs, working on various bits of kernel work, getting the upcoming clustering work to go […]
    • Monitor your Kubernetes Cluster 16/01/2018
      This article originally appeared on Kevin Monroe’s blog Keeping an eye on logs and metrics is a necessary evil for cluster admins. The benefits are clear: metrics help you set reasonable performance goals, while log analysis can uncover issues that impact your workloads. The hard part, however, is getting a slew of applications to work […]
  • RSS LUGMen

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

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 )

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 )

Google+ photo

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

Conectando a %s

 
A %d blogueros les gusta esto: