Aqui trantando de aplicar Singleton:
Comprender los objetivos y pre-requisitos del curso
Todo lo que aprenderás sobre buenas prácticas para escribir código
¿A quién beneficia contar con código bien escrito?
Ejes que hacen a la calidad del código
Aprender a escribir código legible
Código prolijo
Identificadores mnemotécnicos, específicos y precisos
Aprender a escribir código mantenible
Código modular
Código reutilizable
Código organizado
Escribir código libre de vicios
Evitar el hardcoding
Evitar efectos colaterales
Conocer los principios SOLID
Principios SOLID: Single Responsibility Principle
Open/Closed Principle
Liskov Substitution Principle
Interface Segregation Principle
Dependency Inversion Principle
Conocer los conceptos de Patrones de diseño y su aplicación
Patrones de diseño: Singleton
Factory
Command
Comprender las nociones de testing automatizado
Introducción al Testing Automatizado
Armado del entorno de pruebas en PHP
Test Driven Development
Incorporar habilidades para el trabajo en equipo
Pull requests
Documentación
Reforzar lo aprendido
A quién beneficia el código bien escrito
Aplicar lo aprendido: Libro de visitas
Conclusiones
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
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 35
Preguntas 1
Aqui trantando de aplicar 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:
⚠ 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.
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.
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..
}
}
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.
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
<?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:
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.
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
🍃 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
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.
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.
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.
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
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
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.