generated from UnBArqDsw2024-2/RepositorioTemplateEntrega3
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
823e1f8
commit 967b8cf
Showing
1 changed file
with
167 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,167 @@ | ||
# 3.1.5. | ||
|
||
## Introdução | ||
<!-- | ||
A introdução deve apresentar o documento de forma clara e objetiva, fornecendo uma visão geral do conteúdo que será abordado. | ||
Perguntas a serem respondidas: | ||
Este documento tem como objetivo apresentar o [tema ou objetivo]. | ||
O [tema ou objetivo] se refere a [definição ou descrição breve] [Nº Referência]. | ||
O [tema ou objetivo] é de extrema importância para [motivo], pois [justificativa]. | ||
Sendo assim, este documento tem como finalidade [objetivo do documento]. | ||
--> | ||
O Singleton é um dos padrões de [projeto criacional](PadroesDeProjeto/3.1.GoFsCriacionais) mais conhecidos e amplamente utilizados. Ele garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a essa instância. Este padrão é particularmente útil quando é necessário assegurar que certos objetos sejam únicos em todo o ciclo de vida de uma aplicação, como configurações globais, loggers ou conexões com bancos de dados. | ||
|
||
A estrutura do Singleton (ver Figura 1) baseia-se na definição de um construtor privado que impede a criação de múltiplas instâncias da classe. Uma instância única é armazenada como um atributo estático da própria classe e acessada através de um método estático que retorna essa instância. | ||
|
||
<font size="2"><p style="text-align: center">Figura 1 - Estrutura do Singleton.</p></font> | ||
|
||
<center> | ||
|
||
 | ||
|
||
</center> | ||
|
||
## Metodologia | ||
Neste documento, será apresentada a aplicação do padrão Singleton em um contexto prático de uma aplicação de turismo. O exemplo será desenvolvido em Java, demonstrando como garantir que apenas uma instância de uma classe de gerenciamento de configuração esteja ativa durante a execução do programa. | ||
|
||
O Singleton será implementado em três etapas principais: | ||
|
||
1. Criar um mecanismo para garantir uma única instância. | ||
|
||
2. Proteger a criação de novas instâncias. | ||
|
||
3. Disponibilizar um ponto de acesso global para a instância. | ||
|
||
## Desenvolvimento | ||
|
||
A implementação do Singleton será baseada nos seguintes elementos: | ||
|
||
1. Um atributo estático privado para armazenar a instância. | ||
|
||
2. Um método público estático que retorna a instância única. | ||
|
||
3. Um construtor privado para impedir instanciação externa. | ||
|
||
|
||
## Código | ||
Abaixo temos um exemplo da implementação | ||
|
||
#### Classe Singleton em Java | ||
|
||
Abaixo está o exemplo da classe ConfigManager implementando o padrão Singleton: | ||
|
||
```ts | ||
public class ConfigManager { | ||
// Atributo estático privado para armazenar a instância única | ||
private static ConfigManager instance; | ||
|
||
// Atributo de configuração | ||
private String configuration; | ||
|
||
// Construtor privado para impedir instanciação externa | ||
private ConfigManager() { | ||
this.configuration = "Configuração Padrão"; | ||
} | ||
|
||
// Método público estático para fornecer a instância única | ||
public static ConfigManager getInstance() { | ||
if (instance == null) { | ||
instance = new ConfigManager(); | ||
} | ||
return instance; | ||
} | ||
|
||
// Métodos para acessar e modificar a configuração | ||
public String getConfiguration() { | ||
return configuration; | ||
} | ||
|
||
public void setConfiguration(String configuration) { | ||
this.configuration = configuration; | ||
} | ||
} | ||
``` | ||
#### Testando o Singleton | ||
|
||
O seguinte exemplo demonstra o comportamento do Singleton: | ||
|
||
```ts | ||
public class Main { | ||
public static void main(String[] args) { | ||
// Obtém a instância do ConfigManager | ||
ConfigManager config1 = ConfigManager.getInstance(); | ||
System.out.println(config1.getConfiguration()); // Saída: Configuração Padrão | ||
|
||
// Modifica a configuração | ||
config1.setConfiguration("Nova Configuração"); | ||
|
||
// Obtém novamente a instância | ||
ConfigManager config2 = ConfigManager.getInstance(); | ||
System.out.println(config2.getConfiguration()); // Saída: Nova Configuração | ||
|
||
// Verifica se ambas as instâncias são iguais | ||
System.out.println(config1 == config2); // Saída: true | ||
} | ||
} | ||
``` | ||
#### Resultado Esperado | ||
|
||
Ao executar o código acima, a saída será: | ||
|
||
```ts | ||
Configuração padrão | ||
Nova configuração | ||
As instâncias são iguais? true | ||
``` | ||
### Análise dos Resultados <!-- NÃO apague essa sub --> | ||
<!-- | ||
Utilize este espaço para destacar os principais achados, interpretar os dados e identificar implicações ou limitações dos resultados obtidos. Adicione observações objetivas e mantenha o foco na relevância dos resultados para o projeto. | ||
--> | ||
## Gravação da Reunião | ||
<!-- | ||
Apague essa seção se não tiver gravação(s) da reunião. Mas tenha em mente que é uma boa prática gravar as reuniões para futuras consultas. | ||
--> | ||
<font size="2"><p style="text-align: center">Vídeo 1 - Gravação da reunião</p></font> | ||
<iframe width="560" height="315" | ||
src="" | ||
frameborder="0" | ||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" | ||
allowfullscreen> | ||
</iframe> | ||
<font size="2"><p style="text-align: center">Participantes: [Guilherme Meister][GuilhermeGH], 17 de dez. de 2024.</p></font> | ||
## Bibliografia | ||
> **Arquitetura e Desenho de Software - Aula GoFs Criacionais**. Material de apoio em slides. Milene Serrano. | ||
> Gamma, Erich, et al. **Padrões de projetos: soluções reutilizáveis de software orientados a objetos.** Disponível em: Minha Biblioteca, Grupo A, 2000. | ||
>REFATORING GURU. Singleton Design Pattern. Disponível em: https://refactoring.guru/pt-br/design-patterns/singleton. Acesso em: 12 dez. 2024. | ||
> | ||
## Histórico de Versões | ||
| Versão | Data | Descrição | Autor(es) | Revisor(es) | Detalhes da revisão | | ||
| :----: | :--: | --------- | ----------- | ------ | :---: | | ||
| `1.0` | 16/12/2024 | Criação do documento. | [Guilherme Meister][GuilhermeGH] & [Samuel Alves][SamuelGH] | | | | ||
[AnaGH]: https://github.com/analufernanndess | ||
[CainaGH]: https://github.com/freitasc | ||
[ClaudioGH]: https://github.com/claudiohsc | ||
[EliasGH]: https://github.com/EliasOliver21 | ||
[GuilhermeGH]: https://github.com/gmeister18 | ||
[JoelGH]: https://github.com/JoelSRangel | ||
[KathlynGH]: https://github.com/klmurussi | ||
[PabloGH]: https://github.com/pabloheika | ||
[PedroRGH]: https://github.com/pedro-rodiguero | ||
[PedroPGH]: https://github.com/Pedrin0030 | ||
[SamuelGH]: https://github.com/samuelalvess | ||
[TalesGH]: https://github.com/TalesRG |