No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Patrones de dise帽o: Singleton

16/26
Recursos

Los patrones de dise帽o son soluciones de arquitectura de software aplicables a diferentes problemas.

El patr贸n Singleton permite restringir la creaci贸n de objetos pertenecientes a una clase o al valor de un tipo a un 煤nico objeto.

Aportes 37

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Aqui trantando de aplicar Singleton:

Patrones de dise帽o: Singleton


Estos son soluciones conceptuales que se pueden aplicar a la hora de c贸mo dise帽ar tus clases. Y existen 3 tipos de patrones:

  1. Creaci贸n 鈫 Se encargan de c贸mo crear nuevas instancias de nuestro objetos.
  2. Estructurales 鈫 Nos dicen c贸mo debemos estructurar nuestras clases.
  3. Comportamiento 鈫 Nos dicen c贸mo deben comportase nuestros objetos.

鈿 Esto no se trata de c贸digo, sino de ayudas de c贸mo pensar nuestra aplicaciones.

Tambi茅n recuerda que estos patrones no son aplicables siempre. Son ideas que nos pueden ayudar a pensar.

Singleton

Este patr贸n se puede pensar como un patr贸n de creaci贸n o de comportamiento. La idea consiste en tener un clase que tenga una sola instancia en nuestra aplicaci贸n. Usualmente este patr贸n se utiliza para optimizar recursos.

Este se encarga de evitar a toda costa de exista m谩s de una instancia. Para conseguir esto debemos hacer private el constructor. Para instanciar esta clase, crearemos una funci贸n que normalmente se llamar谩 getInstance y est谩 se encargar谩 de comprobar si ya existe una instancia, si no existe una, la funci贸n la crear谩.

馃檧 Aqu铆 un video que explica un poco m谩s que el video

Muchos nos habremos topado con la disyuntiva: 驴Por qu茅 aplicar un dise帽o singleton si puedo hacerlo a trav茅s de una clase est谩tica (Ej鈥 en C#)?. En mi experiencia un motivo es que los objetos singleton se pueden pasar como par谩metros a m茅todos y otro es que las clases en dise帽o singleton pueden implementar interfaces, lo cual no es posible con las clases est谩ticas.

Vale, el patr贸n Singleton te dice que solo puede haber una instancia en toda la aplicaci贸n y sirve para ahorrar recursos, la idea es que sus constructores sean privados y que tengan un m茅todo que retorne una instancia de la clase para asegurar que solo se est谩 instanciando una sola vez.

Aqui el codigo de la lamina

class Singleton {
    private static $theInstance = null;
    public statis function getInstance(){
        if ( self::$theInstance === null ) {
            self::$theInstance = new sefl();
        }
        return self::$theInstance
    }
    privade function __contruct() {
        // code..
    }
}

Si quieres seguir aprendiendo, por aqu铆 te dejo un v铆deo con otra implementaci贸n de Singleton 馃槃

Un Singleton tambi茅n sirve para que un m茅todo sea thread-safe.

https://www.youtube.com/watch?v=3qTmBcxGlWk&list=PLJkcleqxxobUJlz1Cm8WYd-F_kckkDvc8&ab_channel=BettaTech Por si quieren profundizar con ejemplos faciles de entender, esta es una lista de reprodiccion respecto a los patrones de dise帽o.

son simplemente patrones para taeras especificas no es arquitectura

La 鈥減atronitis鈥, una enfermedad com煤n entre developers

Singleton:

<?php
  class Singleton
  {
    //propiedad privada y unica de la clase, su instancia
    private static $theInstance = null;

    //obtener la instancia singleton
    public static function getInstance()
    {
      //si la instancia es null, crear una nueva instancia propia
      if (self::$theInstance === null) {
        self::$theInstance = new Self();
      }
      //si la instancia no es null, retornar la existente
      return self::$theInstance;
    }

    //constructor privado
    private function __construct()
    {
      $this->property = "hello there :)";
    }
  }
?>

Uso

<?php

  require_once __DIR__.'/Singleton.php';

  $singleton = Singleton::getInstance();

  echo var_dump($singleton); //nos mostrar谩 la instancia

?>

Es 煤til para instanciar conexi贸n a una base de datos

En el curso 鈥淐urso de Patrones de Dise帽o en Android鈥 esta esta clase que igual habla de singleton https://platzi.com/clases/1828-patrones-android/26795-singleton/

Para todos aquellos que quieran profundizar m谩s en patrones de dise帽o, los invito a ver este repositorio con ejemplos en PHP:

https://github.com/lordvadercito/DesignPatternsPHP

Pense que cuando te refer铆as a los patrones de dise帽o eran como est谩ndares de codificaci贸n, pero no, estas son soluciones de arquitectura de software aplicables a diferentes problemas.

  1. Patrones de dise帽o: Singleton
    Creacion: como se deben crear nuevas instancias de objetos
    Estructurales: como se deben estructurar las clases
    Comportamiento: como se deben comportar los objetos

Singleton: una clase que tenga una sola instancia en toda la aplicacion, se puede hacer limitandola dejandola privada dentro de la clase principal con una validacion anterior

驴Entonces el patr贸n Singleton me funciona cuando s贸lo quiero que mi clase tenga una 煤nica instancia y nada m谩s? Y es como una forma de que se quede as铆, est谩tico.

Tremenda embarrada, a buscar en YouTube m谩s casos de usos, mejoren el curso

馃崈 El patr贸n Singleton es un patr贸n de creaci贸n que se utiliza para garantizar que solo existe una instancia de una clase en un momento dado en el proceso. Esto se hace utilizando un constructor privado para restringir la creaci贸n de instancias y proporcionando un m茅todo p煤blico para obtener la 煤nica instancia existente. Este patr贸n se utiliza a menudo para instancias de objetos que requieren una gran cantidad de recursos del sistema, como conexiones de base de datos o archivos de registro.

el mejor lugar en donde he encontrado informaci贸n con ejemplos en varios lenguajes de programaci贸n sobre patrones de dise帽oPatrones de dise帽o

Que es?

Este patr贸n se puede pensar como un patr贸n de creaci贸n o de comportamiento. La idea consiste en tener un clase que tenga una sola instancia en nuestra aplicaci贸n. Usualmente este patr贸n se utiliza para optimizar recursos.

Para que sirve?

Este se encarga de evitar a toda costa de exista m谩s de una instancia.

Objetivo?

Asegurar que existe solo una instancia de una clase concreta - lo que se quiere es que sea imposible tener mas de una instancia para asegurarnos que siempre estamos la misma instancia, por lo que singleton provee accesibilidad global.

Como se logra en c贸digo?

  1. Hacer el constructor privado, con eso se logra que nos se pueda acceder fuera de la clase, por lo que la clase gana el control de como se instancia sus objetos.

  2. Para instanciar esta clase es con otra funci贸n, normalmente se le llama getInstance que nos indica que estamos obteniendo la instancia del singleton y esta instancia se encarga a nivel interno de construir esta instancia, al ser parte de la clase puede llamar al constructor privado sin problema y puede comprobar si ya existe otra instancia creada y si es asi la retorna

    Al hacer la clase static ganamos el acceso global a la funci贸n (ya que no es parte de ninguna instancia concreta, es parte de la propia clase, logrando que desde cualquier lado del proyecto se logre tener la instancia de la clase que tambien sera static)

Singleton es un patr贸n de dise帽o creacional que nos permite asegurarnos de que una clase tenga una 煤nica instancia, a la vez que proporciona un punto de acceso global a dicha instancia.

Dejo un art铆culo que me pareci贸 super interesante para seguir prestandole atenci贸n al Singleton.

genial estos temas me agradan mucho

Nota: los patrones de dise帽o son soluciones conceptuales que se pueden aplicar a la hora de crear las clases y existen tres tipos que son:
1.- Creaci贸n, como se crean nuevas instancias de los objetos.
2.- Estructurales que nos dicen como debemos estructuras nuestra clases
3.- Comportamiento que nos dicen como se deben de comportar nuestros objetos.

No se trata de c贸digo si no de ayuda de como pensar nuestro SW. Estos patrones no son aplicables siempre, son ideas que te pueden ayudar a pensar para no empezar en blanco y no tenemos que aplicar un patr贸n siempre para no depender mucho de ellos paternitis.
El patr贸n singleton se puede pensar como un patr贸n de creaci贸n y de comportamiento es decir tener una clase que solo tenga una instancia a lo largo de toda nuestra aplicaci贸n. Para evitar problemas y ahorrar recursos.

<?php
    //Definir propiedades o m茅todos est谩ticos nos permiten crear m茅todos y propiedades
    // que son accesibles sin la necesidad de instanciar una clase.
    //Recordar que estos m茅todos no ser谩n 煤nicos para cada instancia,
    // es decir que si ustedes de alguna forma modifican la propiedad est谩tica,
    //esta ser谩 cambiada para todos los objetos (global compartida entre todas las clases del mismo tipo).
    class Singleton{
        private static $theInstance = null;//Declara el dato como estatico y en nulo asegurando solo una variable para esta clase.
        public static function getInstance(){//M茅todo para crear la instancia o hacer la petci贸n para obtenerla.
            if ( self::$theInstance === null ) {//Si no ha sido creada.
                self::$theInstance = new self();//Le pasa como par谩metro la clase misma.
            }
            return self::$theInstance;//Regresa la clase misma como un objeto 煤nico.
        }

        private function __contruct(){//Constructor de la clase que solo puede ser llamado por getInstance.
            // code..
        }
    }
?>

Este me costo pero lo logre entender!

Explicaci贸n perfecta. Gracias

Otra forma de asegurarse que no se puede instanciar la clase en otro lugar de tu aplicaci贸n es haciendo su m茅todo constructor privado. 馃懆鈥嶐煉

Un video en donde se explica los pros y contra del Singleton

https://www.youtube.com/watch?v=-FRm3VPhseI

Interesante clase. Me pareci贸 un poco confuso pero bueno a buscar fuentes externas para entenderlo un poco mejor. 馃榾

Singleton
Este patr贸n de dise帽o restringe la creaci贸n de instancias de una clase a un 煤nico objeto.

Los patrones de dise帽os son soluciones conceptuales que se pueden aplicar a la hora de pensaren c贸mo dise帽ar tus clases B谩sicamente. Existen tres tipos de patrones los de creaci贸n que nos hablan de c贸mo se crean nuevas instancias de los objetos, los estructurales que nos dicen, como digamos,
estructurar nuestras clases. Y por 煤ltimo, en los de comportamientos que nos dicen c贸mo deben comportarse nuestros objetos