Pergunta

Agora, eu tenho uma instrução switch que está sendo usado para criar objetos com base em uma corda. Existem três tipos de objetos que se estendem um objeto genérico abstrato. Eu realmente deveria estar usando um padrão de fábrica, o que eu estou tentando descobrir agora. Meu problema é o seguinte:. Agradeço a flexibilidade do padrão de fábrica, mas agora eu estou armazenando os pretensos produtos em dicionários especiais dedicados ao seu tipo

_type1[location] = ArrayOfType1s
_type2[location] = ArrayOfType2s
_type3[location] = ArrayOfType3s

Isso funciona se eu só tenho três tipos, mas se eu decidir adicionar mais com a flexibilidade do padrão de fábrica, então, que apresenta o problema de como armazená-los, como eu teria que fazer um dicionário especial de cada vez eu adicionar um ...

A única resposta que posso pensar é ninho meus dicionários, que soa muito lento.

_factoryOutput[type] = type[location] = ArrayOfTypes

Isso é provavelmente uma solução viável, mas alguém pode sugerir uma mais limpa? Eu estou trabalhando em AS3, mas fique à vontade para fornecer uma solução mais genérica.

Foi útil?

Solução

Uma possível solução é ter seus produtos implementar um método getType (). Isso só poderia retornar uma string ou int que é exclusivo para esse tipo de produto. Você poderia dinamicamente criar matrizes exclusivas para os tipos de produtos como eles vêm para cima (ou seja: verificar se existe disposição para o tipo, criar, se necessário antes de guardar) ou, alternativamente, você poderia simplesmente armazenar todos os tipos de produtos em um array, e têm funções de filtro para recuperá-los. Um exemplo disso seria:

function getProductsByType(type:String):Array {
    var matched:Array = [];
    for(//loop over all products) {
        //if type is what your looking for, push into matched array
    }

    return matched;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top