Padrões de Projeto em PHP: 싱글톤

6397 단어 phpwebdevprogramming
디자인 패턴, os padrões de projetos, são extremamente úteis eeficazes na escalabilidade, robustez e compreensão do código. 문제를 해결하기 위해 문제를 해결하기 위해 복잡한 문제를 해결하기 위해 문제를 해결하기 위해 문제를 해결해야 합니다. Foram formulados pela tão estimada Gang of Four e são utilizados em larga escala. Pense neles como uma solução para situações onde você provavelmente reinventaria a roda se não os conhecesse.

O padrão de projeto que vou apresentar hoje é um padrão criacional (uma das três categoria de padrões de projeto): o 싱글톤

싱글톤을 간단하게 적용할 수 있다는 사실을 확신합니다. O Singleton preza que apenas uma instância seja retornada. Isso possui diversa aplicabilidades. Pense numa classe com funcionalidades genéricas que é utilizada em vários pontos de sua aplicação, mas que não possui um estado. Seria uma boa ideia utilizar um Singleton para essa classe, certo?

Vou explicar por etapas a construção dessa classe para objetos solitários.

Vamos voltar ao anime Naruto e finger que o único Uchiha existente realmente é o Sasuke (embora saibamos que tenha mais Uchihas no mundo do que Almeidas). 로고는 Uchiha na face da terra에 존재합니다.

final class Uchiha {
}


Ao declarar a palavra-chave final no inicio da classe estamos dizendo que essa classe não pode ser herdada, isto é: não pode gerar classes filhas. É isso mesmo, vamos finger que o Sasuke é estéril também (pobre Sasuke).

Um dos modos efetivos de bloquear a instanciação de uma classe é impedir sua proliferação é não deixando que o metodo construtor seja invocado... e não, não adianta deixar de definir um construtor, a classe faz isso automaticamente. Uma técnica que podemos aplicar é utilizando o modificador de acesso private em oposição ao public , em nosso 구성자:

final class Uchiha {

    private function __construct()
    {
    }

}


Outra situação que precisamos impedir é a clonagem do nosso Uchiha (Afinal só se clona Senjus no anime). A técnica é a mesma: 특별한 접근을 방해합니다.

final class Uchiha {

    private function __construct()
    {
    }

    private function __clone()
    {
    }

}


Um cenário mais atípico: PHP chamado o __wakeup가 없는 특별한 방법이 존재합니다. ele permite a completa construção de objetos desserializados (o Google é seu amigo). Vamos prevenir essa arte de Orochimaru tornando também o método __wakeup 프라이빗

final class Uchiha {

    private function __construct()
    {
    }

    private function __clone()
    {
    }

    private function __wakeup()
    {
    }

}


Por fim, vamos criar um método que permite retornar o nosso Uchiha.

final class Uchiha {

    // Declaramos o atributo a ser retornado
    private static ?Uchiha $instance

    private function __construct()
    {
    }

    private function __clone()
    {
    }

    private function __wakeup()
    {
    }

    // Método para obter a instância
    public function getInstance()
    {
       // Garantimos que somente uma instância seja criada
       if (!isset(self::$instance)) {
           self::$instance = new static();
       }

       // Por fim retornamos a instância
       return self::$instance;
    }
}

// criamos nosso objeto Singleton
$sasuke = Uchiha::getInstance();


그렇지 않습니다.
Até a proxima! 😊

좋은 웹페이지 즐겨찾기