2017-08-17 3 views
0

Disons qu'il existe un CarFactory class et il est étendu par classes comme FerrariFactory et VolvoFactory. Chaque classe a une méthodeÉtend une classe d'usine un anti-modèle?

Maintenant, une exigence se présente que pour toute donnée List<CarPart> la liste optimale des voitures doit être retourné.

Serait-ce un anti-pattern pour mettre la logique dans CarFactory.build?

CarFactory 
    List<Car> build(List<CarPart>) 
     split car part list into optimal car part sub-lists for each factory 
     instantiate car factories and pass in the sub-list of car parts 
     return collection of cars 

Ou serait-il préférable d'avoir une autre classe comme une classe CarBuilder fait cela ?. Existe-t-il un modèle de conception typique que je peux utiliser pour résoudre ce problème?

+1

Il n'y a pas de "virtuel" en Java. – RealSkeptic

+0

Qu'entendez-vous par * optimal *? – TriskalJM

+0

Chaque pièce est étiquetée par le type d'usine à laquelle elle est supposée appartenir. 'VolvoPart' ou 'FerrariPart' – bafuda

Répondre

-1

Je pense que toute logique dans le générateur est anti-pattern, parce que, instancier un nouvel objet devrait être très rapide et tout à fait. Je veux dire, ce code maximum dans le constructeur - un seul opérateur new ClassName(params...). si vous avez besoin de toute logique - la déplacer à la nouvelle petite classe, qui résolvent ceci:

List <Car> CarFactory.build (params...) { 
    return new CarLogicSolver(params).list(); 
} 

vous pouvez voir d'excellents exemples dans java.util.stream.Collectors.toSet, .ToList, toMap etc.