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

8 respostas
programação
berkshire

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?

8 Respostas

D

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.

berkshire

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

D

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.

javaflex

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

berkshire

Vdd, vou usar um BD mesmo, vai ficar melhor

berkshire

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

javaflex

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

j-menezes

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.

Criado 22 de maio de 2020
Ultima resposta 26 de jun. de 2020
Respostas 8
Participantes 4