Singleton - Padronizando um Sistema de Gerenciamento de Usuários
Explorando Padrões de Projetos com Kotlin - 1/5
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:
- Crie uma classe
User
com os seguintes atributos:id
(inteiro) ename
(string). - 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.
- 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.
Entrada | Saída |
---|---|
2 | 1 - Ada |
Ada | 2 - Linus |
Linus |
Entrada | Saída |
---|---|
3 | 1 - Grace |
Grace | 2 - Alan |
Alan | 3 - Steve |
Steve |
Entrada | Saída |
---|---|
4 | 1 - Tim |
Tim | 2 - Margaret |
Margaret | 3 - John |
John | 4 - 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.