디자인 패턴: 싱글톤
10016 단어 programmingproductivity
Permite que você garanta que uma classe tenha apenas uma instância, enquanto provê acesso global para ela.
O padrão Singleton resolve esses dois problemas de uma vez, mas por outro lado viola o princípio de responsabilidade única.
문제에 대한 설명
Permite que você garanta que uma classe tenha apenas uma instância.
Você deve estar se perguntando o motivo de alguém querer isso, mas um bom exemplo é quando precisamos usar em vários pontos da aplicação um recurso compartilhado, como por exemplo a conexão. Quando criado um objeto, ao precisar usar ele novamente aaplicação irá te devolver o mesmo objeto criado anteriormente ao invés de criá-lo novamente.
Provê acesso global para uma instância.
Quem nunca criou aquela variável global no index para ser usado ao longo do projeto? Nunca fez? É, eu já fiz hehe
São bem úteis, não irei mentir pra você, mas são bem inseguras, pois o seu conteúdo pode ser alterado por qualquer codigo e criar um efeito colateral na sua aplicação.
Na mesma ideia de uma variável global, o Singleton permite que você acesse uma instância de uma classe globalmente em qualquer lugar da aplicação, mas previne que o seu do seja sobrescrito por outro codigo.
코모 구현체
<?php
class Database
{
private static $instance;
// Continuação da classe...
getInstance
.// Inicio da classe...
public static function getInstance()
{
// Implementação da função
}
// Continuação da classe...
// Inicio da classe...
public static function getInstance()
{
if (is_null(self::$instance)) {
echo 'Passou aqui uma só vez' . PHP_EOL;
self::$instance = new self();
}
return self::$instance;
}
// Continuação da classe...
OBS: Se tiver trabalhando com multi thread, dever colocar um thread lock antes do operador
new
no métodogetInstance
.// Inicio da classe...
private function __construct()
{
$this->connection = 'conectado';
}
// Continuação da classe...
$database = Database::getInstance();
아고라 바모스 ver todo o código daimplementação.
<?php
class Database
{
private static $instance;
private $connection;
private function __construct()
{
$this->connection = 'conectado';
}
public function query($sql)
{
return 'Resultado da query: ' . $sql . PHP_EOL;
}
public static function getInstance()
{
if (is_null(self::$instance)) {
echo 'Passou aqui uma só vez' . PHP_EOL;
self::$instance = new self();
}
return self::$instance;
}
}
class User
{
public function getUser()
{
$database = Database::getInstance();
return $database->query('SELECT * FROM Users;');
}
}
class Transactions
{
public function getTransaction()
{
$database = Database::getInstance();
return $database->query('SELECT * FROM Transactions;');
}
}
// Case 1
$user = new User;
echo $user->getUser();
// Case 1
$transaction = new Transactions;
echo $transaction->getTransaction();
$database = new Database; //fatal error
Nas classes que Representativeam as models
User e Transactions
a instância está dentro da função, mas numa implementationação결론
단일 톤 quando você ver a necessidade de uma classe possuir apenas uma instância disponível e global em sua aplicação e tbm caso precision de um controle mais estrito sobre as variáveis globais를 사용하십시오.
É isso galera, chegamos no fim de mais um artigo inté o próximo!
Reference
이 문제에 관하여(디자인 패턴: 싱글톤), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/luanloose/design-pattern-singleton-32ie텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)