Este artigo destina-se a qualquer um que, pela primeira vez, esteja encontrando o conceito de padrões de projeto, tenha ouvido o termo singleton ou de alguma forma implementado o padrão singleton, mas não entendeu o que estava acontecendo. Bem-vindo! Os alunos do CodeGym encontram padrões de design pela primeira vez no nível 15, quando o capitão inesperadamente pede que eles "reforcem" sua compreensão implementando o padrão Java Singleton com implementação preguiçosa. Os alunos que ouvem sobre o padrão singleton pela primeira vez instantaneamente têm muitas perguntas: o que diabos é um padrão de projeto? Por que precisamos disso? O que é um singleton ? E, finalmente, o que é implementação preguiçosa? Vamos responder a essas perguntas em ordem.
E o padrão singleton é apenas um deles.
com blackjack e númerose gastar muito tempo fazendo isso, ou você pode implementar um que tenha sido compreendido e descrito por muito tempo. O mesmo acontece com os padrões de projeto. Além disso, com os padrões de projeto, o código se torna mais padronizado e, ao usar o padrão apropriado, é menos provável que você cometa erros, pois as armadilhas comuns do padrão foram identificadas e eliminadas há muito tempo. Acima de tudo, o conhecimento dos padrões ajuda os programadores a se entenderem melhor. Você pode simplesmente dizer o nome de um padrão em vez de tentar fornecer uma longa explicação para seus colegas programadores. Resumindo, os padrões de projeto ajudam você a:
Para concluir esta seção, notamos que todo o corpo de padrões de projeto pode ser dividido em três grandes grupos:
O que no mundo é um padrão de design?
Eu acredito que um pouco de história é para responder a esta pergunta com a melhor compreensão. Existem quatro autores de programação famosos (Erich Gamma, John Vlissides, Ralph Johnson e Richard Helm) que tiveram uma ideia interessante. Eles perceberam que o desenvolvimento de software geralmente exigia que eles resolvessem aproximadamente os mesmos problemas e escrevessem códigos estruturados da mesma maneira. Então eles decidiram descrever padrões típicos que muitas vezes precisam ser usados na programação orientada a objetos. Seu livro foi publicado em 1994 sob o título Design Patterns: Elements of Reusable Object-Oriented Software. O nome do livro acabou ficando muito longo e as pessoas começaram a chamá-lo simplesmente de livro da Gangue dos Quatro. A primeira edição incluiu 23 padrões. Posteriormente, dezenas de outros padrões foram descobertos.Um padrão de projeto é uma solução padronizada para um problema comum. |
Por que precisamos de padrões de projeto?
Você pode programar sem conhecer os padrões: afinal, no nível 15, você já escreveu centenas de miniprogramas no CodeGym sem saber que eles existem. Isso sugere que os padrões de projeto são um tipo de ferramenta cujo uso distingue o mestre do amador: os padrões de projeto descrevem como resolver adequadamente um problema típico. Isso significa que conhecer os padrões economiza seu tempo. Dessa forma, eles são semelhantes aos algoritmos. Por exemplo, você pode criar seu próprio algoritmo de classificação
|

Finalmente, o padrão singleton
Singleton é um padrão criacional . Esse padrão garante que haja apenas uma instância de uma classe e fornece um ponto de acesso global para esse objeto. Pela descrição, deve ficar claro que esse padrão deve ser aplicado em dois casos:- quando seu programa requer que não mais do que um objeto de uma classe particular seja criado. Por exemplo, um jogo de computador pode ter uma classe Hero e apenas um objeto Hero que descreva o único herói do jogo.
- quando você precisa fornecer um ponto para acesso global a um objeto. Em outras palavras, você precisa disponibilizar o objeto em qualquer lugar do programa. Infelizmente, não basta simplesmente criar uma variável global, pois ela não é protegida contra gravação: qualquer pessoa pode alterar o valor da variável, portanto, o ponto de acesso global do objeto pode ser perdido. Essas propriedades de um Singleton são necessárias, por exemplo, quando você tem um objeto que trabalha com um banco de dados e precisa acessar o banco de dados de diferentes partes do programa. Um Singleton garantirá que ninguém escreva código que substitua a instância criada anteriormente.
-
Encontre um exemplo de Singleton com inicialização lenta.
-
Crie três classes singleton — Sun, Moon, Earth — em arquivos separados usando o mesmo princípio.
-
ImplementoPlanetainterface nas classes Sol , Lua e Terra .
- No bloco estático da classe Solution chame oreadKeyFromConsoleAndInitPlanetmétodo.
-
Implemente oreadKeyFromConsoleAndInitPlanetFuncionalidade do método:
-
5.1. Leia um parâmetro String do console
-
5.2. Se o parâmetro for igual a um dosPlanetaconstantes da interface, crie um objeto thePlanet adequado .
-
-
Você precisa dar à classe um campo estático privado que armazene um único objeto:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; // #1 }
-
Torne o construtor (padrão) privado. Isso significa que ela não pode ser acessada fora da classe e não poderá retornar novos objetos:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton(){} // #2 }
-
Declare um método de criação estático que será usado para obter o singleton:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton() {} public static LazyInitializedSingleton getInstance() { // #3 if (instance == null) { // If the object has not yet been created instance = new LazyInitializedSingleton(); // Create a new object } return instance; // Return the previously created object } }
GO TO FULL VERSION