Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Dúvida sobre design pattern Singleton


Rafael Laurindo

Pergunta

Galera, eu entendi para que serve o padrão, e como implementa-lo. Mas me surgiu uma dúvida, por que não implementar uma classe chamada Singleton ao invés de um método getInstance(). Classe esta, que cria instância de uma classe informada. Acho que seria melhor, ao invés de implementar um método em cada classe. O que acham?

Exemplo:

class Singleton
 {

     static private
         $instance = NULL;
         
     public static function getInstance($className)
     {
         if(empty(self::$instance)){
             self::$instance = new $className();
         }
         return self::$instance;
     }
 }

Editado por Rafael Laurindo
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Salve,

Galera, eu entendi para que serve o padrão, e como implementa-lo.

Será mesmo ?

Vamos tirar suas dúvidas com simples perguntas:

1- Qual seria o objetivo de você ter um objeto(instancia) da classe de código abaixo:

class Singleton
{

    static private
        $instance = NULL;
        
    public static function getInstance($class)
    {
        if(empty(self::$instance)){
            self::$instance = new $class();
        }
        return self::$instance;
    }
}

por que não implementar uma classe chamada Singleton ao invés de um método getInstance(). Classe esta, que cria instância de uma classe informada.

Se for para fazer apenas isso, crie instancia de seus objeto usando o operador new()

Link para o comentário
Compartilhar em outros sites

  • 0
1- Qual seria o objetivo de você ter um objeto (instancia) da classe de código abaixo:
Acho que você não entendeu, o mais importante da classe acima é o método getInstance($className), ao informar o parâmetro $className eu posso criar uma instancia de $className, entendeu? Nesse caso, eu não precisaria colocar o método getInstance(), em todas as classes que eu precisasse usar o padrão Singleton.
Será mesmo ?
A lógica não é difícil, rs. Mas comecei a estudar padrões agora.
Se for para fazer apenas isso, crie instancia de seus objeto usando o operador new()

Mas é o que estou fazendo. Perdão mas, creio que não entendi bem. Toda instancia é criada com o operador new, eu sei. Você acha que eu tava trocando 6 por meia dúzia? :blush:

Eu tenho uma classe que faz a conexão com o banco de dados, você sabe que ao cadastrarmos podemos usar mais de uma classe, e não estou falando de generalização. Logo cada uma tem que possuir uma instância da classe de conexão. Por isso gostaria de que em tempo de execução, em cadastros deste tipo, o sistema usasse uma instância global.

Editado por Rafael Laurindo
Link para o comentário
Compartilhar em outros sites

  • 0

Bom galera, resolvi desta forma.

class Singleton
{

    public function __construct(){
        throw new Exception(__CLASS__.' não pode ser instanciada!');
    }
    
    static private
        $arr_instance = array();
    
    final public static function createInstance($className)
    {
        if (!array_key_exists($className, self::$arr_instance)){
            self::$arr_instance[$className] = new $className();
        }
            return self::$arr_instance[$className];
    }
}

Obrigado, pela atenção de todos.

Editado por Rafael Laurindo
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...