O que é Design Pattern?
De forma abstrata o Design Pattern é um conjunto de ideias sistemáticas de como resolver um problema que podem ser usadas em muitas situações semelhantes. Se tratam de um conjunto de boas práticas que o desenvolvedor pode utilizar como ferramenta para arquitetar uma aplicação.
Singleton, o anti-pattern.
O Singleton, classificado como um padrão criacional tem como objetivo garantir que uma classe possua apenas uma instância, provendo a mesma ao restante da aplicação.
Baseado nesse princípio podemos definir que o Singleton possui a missão de:
- Criar uma unica instância;
- Retornar um objeto.
Ao observamos a definição do mesmo, fica evidente que ele acaba por violar o princípio da responsabilidade única(Single Responsability Principle) que provem que uma classe deve possuir apenas e exclusivamente uma responsabilidade.
Outro grande problema é que o padrão necessita de uma tratativa quando estamos trabalhando em um sistema multi thread para garantir que as demais threads não criem um mesmo objeto.
Comumente o padrão é utilizado para garantirmos um estado global para aplicação, pense em um modelo de chat construído em cima de uma tecnologia de sockets, o Singleton tem a função de criar uma instancia de socket única e distribuir essa mesma conexão para os clientes que irão utilizar a aplicação.
Como criar um Singleton?
A criação de um Singleton se resume em dois aspectos:
- Tornar o construtor padrão privado;
- Criar um método de criação estático que funcione como construtor.
Analise o código:
class SpiderMan
@instance = new
private_class_method :new
#O private_class_method torna o método correspondente ao
method_id passado como privado.
def self.instance
@instance
end
#Criamos um método de criação estático que retorna a
própria instância.
end
MilesMorales = SpiderMan.instance
PeterParker = SpiderMan.instance
puts MilesMorales.equal?(PeterParker)
#true
A vantagem de ter um Singleton é saber que ele sempre vai retornar um valor esperado e que sua instanciação irá ocorrer apenas uma vez, tendo ganho de performance. Porem sempre tome cuidado ao implementar o mesmo.
Singleton != classes Singleton.
Algumas literaturas possuem o conceito de classes Singleton, contudo não se deve confundir esses dois conceitos, pois o Singleton se trata de um Design Pattern ou Anti-Pattern e classes Singleton são relacionadas a classes anônimas que o Ruby associa após a criação da classe principal.
Obrigado por me deixar fazer parte do seu tempo! 🥰
Referências:
Discussion (0)