Mechasoft: Blog de Matías J. Magni

…dedicado al Open Source y al delirio del Autor…

  • Matías J. Magni

  • RSS Ubuntu

    • Security Team Weekly Summary: August 17, 2017 17/08/2017
      The Security Team weekly reports are intended to be very short summaries of the Security Team’s weekly activities. If you would like to reach the Security Team, you can find us at the #ubuntu-hardened channel on FreeNode. Alternatively, you can mail the Ubuntu Hardened mailing list at: ubuntu-hardened@lists.ubuntu.com During the last week, the Ubuntu Securit […]
    • How to set up Kubernetes on any cloud and monitor your apps with Weave 17/08/2017
      On August 2, Luke Marsden (Weaveworks) and Marco Ceppi (Canonical) presented a webinar on how to Speed up your software development lifecycle with Kubernetes. In the session they described how you can use conjure-up and Weave Cloud to set up, manage and monitor an app in Kubernetes. In this tutorial we’re going to show you […]
    • Ubuntu Foundations Development Summary – August 16, 2017 16/08/2017
      This newsletter is to provide a status update from the Ubuntu Foundations Team. There will also be highlights provided for any interesting subjects the team may be working on. If you would like to reach the Foundations team, you can find us at the #ubuntu-devel channel on freenode. Highlights Updated cloud images have been released […]
    • Kernel Team Summary- August 16, 2017 16/08/2017
      Development (Artful / 17.10) We intend to target a 4.13 kernel for the Ubuntu 17.10 release. The artful kernel is now based on Linux 4.11. The Ubuntu 17.10 Kernel Freeze is Thurs Oct 5, 2017. The kernel in the artful-proposed pocket of the Ubuntu archive has been updated to v4.12.7 The kernel in the Artful […]
    • Ubuntu Server Development Summary – 15 Aug 2017 15/08/2017
      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 […]
  • 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

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: