(Design Patterns) Qual a forma mais organizada de escrever minha factory?

Olá, estou escrevendo um código em Kotlin mas acho que minha pergunta independe da linguagem.
Criei uma classe chamada Unidade, ela é uma bean, ou seja só contém meus atributos e os getters e setters.
Fiz uma factory pq meu objetivo é uma lista com várias unidades, essa lista é criada na construtora da factory e a lista não pode ser alterada com o decorrer do código, fiz da seguinte forma:

class UnidadesFactory {

    constructor(){
        val unidades = listOf<Unidade>(
            Unidade(1.0,2.0,"Sao Paulo", "Sao Paulo"),
            Unidade(1.0,2.0,"test2", "Sao Paulo"),
            Unidade(1.0,2.0,"test3", "Sao Paulo"),
            Unidade(1.0,2.0,"test4", "Sao Paulo"),
            Unidade(1.0,2.0,"test4", "Sao Paulo"),
            Unidade(1.0,2.0,"test5", "Sao Paulo")
        )
    }
}

Porém acredito que essa factory possa ficar mais organizada, pra que caso surja uma nova unidade no futuro outro developer possa vir e adicionar sem ter que alterar direto na construtora da factory, vcs tem alguma sugestão de como melhorar isso?

As unidades são armazenadas numa lista dentro do construtor, mas como estas unidades seriam fabricadas?

Sugestão:

class FabricaDeUnidades {
  Map comandos
  constructor() {
    comandos = new HashMap()
    // adiciona as unidades
  }
  criarUnidade(id) {
    return obterComando(id).criar()
  }
  adicionarComando(id, comando) {
    comandos.put(id, comando)
  }
  obterComando(id) {
    return comandos.get(id)
  }
  // singleton
  static INSTANCE = new FabricaDeUnidades()
}

interface Comando {
  criar()
}

Acho que isso é uma mistura de FactoryMethod, Comnand, Singleton e Flyweight.

Se as unidades forem imutáveis, então talvez fosse mais simples usar o Flyweight ou tipo Enum.

Olá, a minha lista é imutável mesmo, o código dela é só essa construtora e isso atende ao que o código precisa. Mas no futuro vão haver mais de 100 Unidades, então me pergunto se essa construtora não vai ficar meio difícil de ler quando isso ocorrer

Vc disse que a lista não pode ser alterada, mas ao mesmo tempo vc diz que o developer pode adicionar unidades na lista. Não ficou muito claro para mim.

Talvez seja melhor usar banco de dados.

Concordo com a resposta do @DlEGO, use banco de dados, loucura isso ai. Se for Android pode usar o sqlite.

Vdd, vou usar um BD mesmo, vai ficar melhor

No final das contas fiz usando um Json, não valia apena usar um BD pois não queria que o usuário se precisa-se estar conectado a internet

Pode fazer assim também. Mas o banco citado (Sqlite) nao precisa de internet, é local totalmente local.

1 curtida

Realmente, tem coisas que nem precisa usar banco de dados, mesmo sendo local, por menor que seja com certeza sera maior que a implementacao do json, enum, properties, xml, classe propria, etc.