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

4 mins de leitura


Singleton - Padronizando um Sistema de Gerenciamento de Usuários

Explorando Padrões de Projetos com Kotlin - 1/5


Desenvolvimento Backend com Kotlin
Desenvolvimento Backend com Kotlin

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:
    • Adicionar um novo usuário ao sistema, recebendo o nome como entrada.
    • Listar todos os usuários cadastrados.
  3. No programa principal (main), siga as etapas abaixo:
    • Solicite ao usuário a quantidade de usuários que deseja cadastrar.
    • Peça ao usuário para informar os nomes dos usuários, um por linha.
    • 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
21 - Ada
Ada2 - Linus
Linus
EntradaSaída
31 - Grace
Grace2 - Alan
Alan3 - Steve
Steve
EntradaSaída
41 - Tim
Tim2 - Margaret
Margaret3 - John
John4 - Richard
Richard

Nota

A implementação do padrão Singleton traz uma abordagem centralizada, com uma única instância do gerenciador de entidades, favorecendo a consistência dos dados e facilitando o acesso global. Por outro lado, optar por não usar o padrão permite maior flexibilidade, possibilitando várias instâncias independentes. A escolha depende das demandas do projeto, design e manutenção. Isso garante adaptabilidade entre diferentes linguagens ou contextos.

Resolução

class User(val id: Int, val name: String)
 
object UserManager {
 
  private val users = mutableListOf<User>()
 
  fun addUser(name: String) {
    TODO("Implementar a lógica de adicionar um novo usuário na lista mutável $users.")
  }
 
  fun listUsers() {
    TODO("Implementar a impressão dos $users, seguindo o padrão definido no enunciado.")
  }
}
 
fun main() {
  val quantity = readLine()?.toIntOrNull() ?: 0
 
  for (i in 1..quantity) {
    val name = readLine() ?: ""
    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.