2013-02-06 5 views
1

(j'utilise Java donc ajouté la balise « Java » Incase il influence toutes les réponses, mais certains pourraient faire valoir que l'étiquette est unecessary.)

Liste de stock - Polymorphisme design

Considérez ce qui suit :

J'ai une véranda/balcon pour planifier graphiquement. Dans le cadre du plan final, je suis tenu d'indiquer le matériel nécessaire pour construire la véranda. Pour simplifier le processus de calcul, j'ai divisé la véranda en différentes Sections:

Au-dessus de plate-forme - qui implique les composants de clôtures en plastique et les fixations (c.-à-vis, boulons)
sous le pont - qui implique le bois sous-trames et plus de fixations.

... plus d'autres que je ne vais pas aller en profondeur.


Pour des arguments bien: Il y a 100 différents articles en stock disponibles en raison des différents modèles de clôtures que nous offrons. Chaque article a sa propre classe, y compris des informations telles que les dimensions, la couleur, la quantité et sa référence d'identification.

Ce que je voudrais faire est de créer une liste de fixations requises pour chaque section et les ajouter tous dans une liste finale sans aucune duplication.
L'idée finale est d'afficher le nom de l'élément et une quantité à côté du plan de traitement.


Ainsi, par exemple:

Section 1 exige:
- 25 x Vis A
- 15 x Vis B
- 5 x Vis C

Section 2 nécessite:
- 25 x Vis A
- 15 x Vis B
- 5 x Vis F

Section 3 nécessite:
- 45 x Vis B
- 50 x Vis C
- 24 x Vis G

Total Liste
Section 1 + Section 2 + Section 3 = {Liste complète des matériaux}


Ce que j'ai essayé/considéré:

Toutes les vis que j'ai mentionné ci-dessus ont leur propre classe et étendre la super classe "Fasteners". Chaque section mentionné ci-dessus a une variable:

ArrayList<Fasteners> 

Alors que je peux calculer j'ajouter les vis à cette variable. Une fois que chaque section a calculé le nombre de fixations nécessaires, je les ajoute ensuite complètement.

J'ai envisagé de créer une méthode "add (Fixings)" dans la super classe "Fasteners" qui ajoute tous les éléments en double. Mais comme il y a 100 articles, je pensais que le codage ne serait pas très efficace et je soupçonne qu'il existe une meilleure façon d'utiliser le polymorphisme que j'ai mis en place ici. Toutes les références en ligne ou des conseils seraient utiles et très appréciés.

Répondre

1

Voici une suggestion:

Faire une ENUM appelé FastenerType, puis utilisez un pour tenir vos attaches. Appelons-le le sac.

faire quelque chose comme

public class FastenerBag { 

    private Map<FastenerType, AtomicInteger> fasteners = new EnumMap<FastenerType, AtomicInteger>(FastenerType.map); 

    FastenerBag(){ 
    // init your ints to zero 
    } 

    public void addFastenersFor(VerandaPart part){ 
    for (FastenerType type : FastenerType.values()){ 
     fasteners.get(type).addAndGet(part.getRequiredFasteners().get(type)); 
    } 
    } 

} 

Ne vous inquiétez pas trop sur la performance. Commencez par le faire fonctionner. Puis l'obtenir lisible (refactor), puis optimiser.

+0

Merci pour votre réponse. Je ne connais pas Enum et EnumMap. J'ai fait une recherche rapide et cela semble prometteur. Je vais examiner cela plus en profondeur et revenir vers vous. – cworner1

+0

Utilisez-vous AtomicInteger parce que j'utilise des threads? Est-ce que "int" suffirait autrement? – cworner1

+0

Je l'ai utilisé parce que vous avez besoin de quelque chose pour contenir l'int; Vous pouvez également utiliser Integers et obtenir et mettre tout le temps, mais c'est plus concis pour écrire. J'ai utilisé AtomicInt parce qu'il existe et je suis paresseux :) Vous pouvez écrire votre propre bien sûr. –