[MÚSICA] [MÚSICA] Olá! Bem vindo ao curso Desenvolvimento Ágil com Padrões de Projeto. Eu sou o Clovis Fernandes. Na aula de hoje nós vamos falar sobre o padrão de projetos singleton. Vamos falar das características que distinguem o padrão singleton. A principal delas é que a gente vai restringir a criação de instâncias de uma classe singleton a uma instância apenas, eu não posso criar outras instâncias ou objetos. Mas podemos lembrar aqui do Highlander, o Connor MacLeod é imortal. Ele vivia entre imortais e ficava matando o outro, decapitando, porque no final só iria sobrar. E isso é o que nós estamos mostrando aqui pra caracterizar que singleton vai ter apenas objeto instanciado pra ela, e apenas. Então, como características vamos ter duas características do singleton. A primeira é essa, é o Highlander. Uma instância única, o que caracteriza uma classe singleton no padrão singleton, é ter uma, e somente uma, instância, não mais do que uma. A segunda que ele tem acesso global, o singleton funciona como se fosse uma variável global, mas sem os problemas que a gente têm de variável global, a variável global normal você pode usá-la quando você quiser de uma maneira desorganizada. Você vai ter problemas de sincronização, usar uma coisa no lugar e causar algum problema outro lugar. O que que nós vamos fazer aqui? Nós vamos com o singleton organizar, é acesso global, mas é organizado. Vamos mostrar aqui alguns exemplos de uso que são apropriados. Vão existir muitas situações que você pode decidir deixar uma classe como singleton ou não. Aqui eu vou dar outros exemplos, como por exemplo o class loader do Java é uma classe, ele é singleton pra uma determinada aplicação. Ela carrega classes pra máquina virtual JVM do Java, ela que vai carregar e ela é única pra uma aplicação. No caso de banco de dados, também, você vai manter o acesso ou fazer as conexões com o banco de dados classes que sejam também singleton. Vale a pena ser singleton. Não necessariamente precisa ser singleton, mas vai ser uma garantia pra você e se você fizer o acesso de uma maneira global e organizado, ela pode ser singleton e vai ser muito vantajoso. Uma outra coisa que pode ser usada com uma classe singleton é o spooler de impressão. Você tem uma impressora que é gerenciada e você põe então uma classe spooler de impressão única, quer dizer, uma classe com uma instância única pra gerenciar todos os serviços que querem imprimir naquela impressora. Para organizar uma fila. Então é bastante interessante essa classe ser singleton. Outra coisa que é interessante por exemplo é o sistema de logging de você registrar informações de uso de determinado sistema, que a gente tá chamando de logging ou de logger, uma classe que vai permitir fazer isso, que aliás vai ser o exemplo que eu vou mostrar depois de singleton. O que ocorre com o logging? O logging, vamos pegar o exemplo da urna eletrônica. Toda vez que eu ligo uma urna eletrônica, ponho no ar o software de votação, as pessoas começam a votar uma a uma e depois eu encerro a votação, todas essas informações vão sendo logadas através de uma instância única do sistema logging porque é importante registrar a hora e ter essa sequência, então, o sistema de logging vai gerenciar, sincronizar todas essas coisas que vão ser gravadas, registradas sobre o sistema. Além de usar na sua aplicação classes que façam sentido ter uma instância única, quando você desenvolve a sua aplicação e aplica padrões de projeto, alguns desses padrões também fazem sentido dado momento que elas sejam classes singleton, algumas das classes desses padrões sejam singleton. O exemplo é a classe prototype, que você vai duplicar, clonar outras classes e vai manter uma cache com essas classes clonadas, e você então vai deixar esse sistema de cache de clonagem de protótipos usando o padrão singleton, para o acesso ser global e as coisas funcionarem direito. Outro padrão que pode-se usar como o singleton é o padrão façade. O padrão façade, dos usos dele é pra você representar subsistemas como todo, vai permitir o acesso àquele subsistema. Então você pode criar essa classe fachada que vai permitir o acesso à subsistema, usando o singleton. Que aí todos os acessos, todo mundo sabe, pode ter acesso global e vai acessar através da fachada. Então é muito interessante ter uma fachada como singleton. Fábrica abstrata também é outro exemplo, na fábrica abstrata eu vou criar famílias de objetos, então eu posso estar organizando essa criação através de uma classe singleton também. Outro padrão de criação de classes é o builder, que ele ajudar a construir objetos complexos. Então, também, você pode tornar esse objeto que vai criar objetos concretos, essa classe builder, torná-la também singleton pra garantir esse acesso de uma maneira organizada pra criação desses objetos complexos. E outro padrão que também pode se usar o padrão singleton é o state. Com isso nós mostramos algumas características do padrão de projetos singleton, que mostra que quando fizer sentido uma classe gerar apenas uma e somente uma instância, é interessante você organizar isso através do padrão singleton. [MÚSICA] [MÚSICA]