Skip to content

Commit

Permalink
#10 Criando documentaçaõ
Browse files Browse the repository at this point in the history
  • Loading branch information
gmeister18 authored Dec 17, 2024
1 parent 823e1f8 commit 967b8cf
Showing 1 changed file with 167 additions and 0 deletions.
167 changes: 167 additions & 0 deletions docs/PadroesDeProjeto/Criacionais/ 3.1.5.Singleton.md
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>

![imagem](../assets/criacionais/)

</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

0 comments on commit 967b8cf

Please sign in to comment.