Pular para o conteúdo
Bruno Dórea
Todos os posts

6 mins de leitura


Padronizando um Sistema de Gerenciamento de Usuários

Desafios de Código Java Intermediários - Design Patterns - 1/5


Java AI Powered
Java AI Powered

Descrição

O Singleton é uma abordagem de design de software que visa assegurar a existência de apenas uma instância de uma classe e fornecer um ponto centralizado para acessá-la. Isso é especialmente benéfico em contextos nos quais é desejável manter uma única ocorrência de uma classe responsável pelo controle de um recurso compartilhado, como configurações, conexões de banco de dados ou caches.

Neste desafio, você deve criar um sistema de gerenciamento de usuários que permita adicionar e listar usuários. Você tem a opção de implementar o padrão Singleton para garantir que haja apenas uma instância do gerenciador de usuários em toda a aplicação. No entanto, a implementação do padrão Singleton é opcional e você pode optar por seguir uma abordagem diferente para resolver o desafio, se preferir.

Especificações do Desafio:

  1. Crie uma classe User com os seguintes atributos: id (inteiro) e name (string).
  2. Implemente uma classe UserManager que siga o padrão Singleton. Esta classe deve possuir as seguintes funcionalidades:
    • a. Adicionar um novo usuário ao sistema, recebendo o nome como entrada.
    • b. Listar todos os usuários cadastrados.
  3. No programa principal (main), siga as etapas abaixo:
    • a. Solicite ao usuário a quantidade de usuários que deseja cadastrar.
    • b. Peça ao usuário para informar os nomes dos usuários, um por linha.
    • c. Após receber os nomes e cadastrar os usuários, liste os usuários cadastrados.

Entrada

Um número inteiro representando a quantidade de usuários que o usuário deseja cadastrar.

Para cada usuário a ser cadastrado, uma string contendo o nome do usuário.

Saída

Uma lista com os nomes dos usuários cadastrados.

Exemplos

A tabela abaixo apresenta exemplos com alguns dados de entrada e suas respectivas saídas esperadas. Certifique-se de testar seu programa com esses exemplos e com outros casos possíveis.

EntradaSaída
2
Ada1 - Ada
Linus2 - Linus
EntradaSaída
3
Grace1 - Grace
Alan2 - Alan
Steve3 - Steve
EntradaSaída
4
Tim1 - Tim
Margaret2 - Margaret
John3 - John
Richard4 - Richard

Resolução

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
 
class User {
    private final int id;
    private final String name;
 
    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }
 
    public int getId() {
        return id;
    }
 
    public String getName() {
        return name;
    }
}
 
class UserManager {
    private static UserManager instance;
    private final List<User> users = new ArrayList<>();
    private int nextId = 1;
 
    private UserManager() {}
 
    public static UserManager getInstance() {
        if (instance == null) {
            instance = new UserManager();
        }
        return instance;
    }
 
    public void addUser(String name) {
        users.add(new User(nextId++, name));
    }
 
    public void listUsers() {
        for (User user : users) {
            System.out.println(user.getId() + " - " + user.getName());
        }
    }
}
 
public class Main {
 
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        UserManager userManager = UserManager.getInstance();
 
        int quantity = scanner.nextInt();
        scanner.nextLine();
 
        for (int i = 1; i <= quantity; i++) {
            String name = scanner.nextLine();
            userManager.addUser(name);
        }
 
        userManager.listUsers();
    }
}

Para encontrar outras soluções, verifique aqui.

Caso encontre algum erro ou tenha sugestões, clique aqui e abra uma issue no Github.