Pattern Project Singleton
É um padrão de projeto de software (do inglês Design Pattern). Este padrão garante a existência de apenas uma instância de uma classe, mantendo um ponto global de acesso ao seu objeto.
Muitos projetos necessitam que algumas classes tenham apenas uma instância. Por exemplo, em uma aplicação que precisa de uma infraestrutura de log de dados, pode-se implementar uma classe no padrão singleton. Desta forma existe apenas um objeto responsável pelo log em toda a aplicação que é acessível unicamente através da classe singleton.
Diagrama UML de determinada classe:
Onde utilizá-lo
Quando você necessita de somente uma instância da classe, por exemplo, a conexão com banco de dados, vamos supor que você terá que chamar diversas vezes a conexão com o banco de dados em um código na mesma execução, se você instanciar toda vez a classe de banco, haverá grande perda de desempenho, assim usando o padrão singleton, é garantida que nesta execução será instânciada a classe somente uma vez. Lembrando que este pattern é considerado por muitos desenvolvedores um anti-pattern, então, cuidado onde for utilizá-lo.
Exemplo do pattern singleton na linguagem PHP
<?php
class Singleton
{
private static $_instance; // Evita que a classe seja instanciada publicamente private function __construct() { } // Evita que a classe seja clonada private function __clone() { } public static function getInstance() { if (!isset(self::$_instance)) { // Testa se há instância definifa na propriedade, caso sim, a classe não será instanciada novamente. self::$_instance = new self; // o new self cria uma instância da própria classe à própria classe. } return self::$_instance; }
}
Vantagens de se utilizar este padrão
Permite o controle sobre como e quando os cliente acessam a instância.
Várias classes singleton podem