Mechasoft: Blog de Matías J. Magni

…dedicado al Open Source y al delirio del Autor…

  • Matías J. Magni

  • RSS Ubuntu

    • Ubuntu 17.10 releases with GNOME, Kubernetes 1.8 & minimal base images 19/10/2017
      19th October, London, UK: Canonical today announced the release of Ubuntu 17.10 featuring a new GNOME desktop on Wayland, and new versions of KDE, MATE and Budgie to suit a wide range of tastes. On the cloud, 17.10 brings Kubernetes 1.8 for hyper-elastic container operations, and minimal base images for containers. This is the 27th release […]
    • MAAS KVM Pods 18/10/2017
      This is a guest post by Michael Iatrou, cloud solutions architect at Canonical OpenStack is the dominant solution in the IaaS space, fueled by the need for reliable, scalable and interoperable private cloud infrastructure to accommodate cloud native applications. Through OpenStack’s open APIs, tenants can easily deploy elaborate virtual (overlay) networks, i […]
    • Kernel Team Summary – October 18th, 2017 18/10/2017
      Development (Artful / 17.10) https://wiki.ubuntu.com/ArtfulAardvark/ReleaseSchedule Important upcoming dates: Ubuntu 17.10 Release - Oct 19 (~1 days away) We intend to target a 4.13 kernel for the Ubuntu 17.10 release. A 4.13.4 based kernel is available for testing from the artful-proposed pocket of the Ubuntu archive. Stable (Released & Supported) The u […]
    • Top snaps in September: games, GNOME apps and more! 18/10/2017
      October, it’s almost time for a new Ubuntu release! This month’s pick of the top snaps is all about spending relaxing time with your computer: playing games, listening to music and enjoying beautiful GNOME applications! If the term snaps doesn’t ring a bell, they are a new way for developers to package their apps, bringing […]
    • Ubuntu Server Development Summary – 17 Oct 2017 17/10/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

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: