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 36

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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 “patronitis”, 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 “Curso 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