6
votes

modèle de conception d'expédition?

Supposons que j'ai une hiérarchie de classe en Java: xxx

et j'ai une autre classe dans le même paquet: xxx

où je Voulez-vous faire quelque chose de différent pour chaque type d'article, mais je ne veux pas définir cette action dans les différentes catégories d'élément ( musicbox , machine à écrire , Soccerball ).

Un moyen de gérer c'est: xxx

Cela fonctionne, mais cela semble vraiment clunky. Y a-t-il un meilleur moyen de le faire, quand je connais des cas spéciaux? (évidemment si élément contient une méthode dosomethingspecial alors je peux simplement appeler La méthode de cette pièce sans se soucier de quel type il est, mais si je ne veux pas que la différenciation se produise dans l'article lui-même, comment puis-je traiter avec elle?)


2 commentaires

Pas une réponse que je connaisse, mais dans ActionScript 3 apparemment, vous pouvez instancier une classe d'une chaîne (c.-à-d. 'Com.djw.musicbox' peut instancier une musique), est-ce que ce genre de chose est possible dans Java peut-être? Juste une suggestion!


@Dan: Classe # FORNAME () . Je me pose cependant des questions sur la valeur ici.


4 Réponses :


0
votes

Vous pouvez créer un modèle de pont pour l'élément, dans lequel l'autre côté était les processus associés à faire lors de l'addition () est appelé. Vous pouvez également ajouter une méthode d'usine au mélange. XXX

J'espère que cela aide.


3 commentaires

Quelle est cette syntaxe? Et comment utilisez-vous p avant de l'attribuer à l'initialement?


Ce n'est pas php ... Version correcte: p.dowhenaddin ()


Désolé, j'ai finalement jeté dans une syntaxe C ++. Ce code source est Java. La méthode de processeur Création correspondante est une méthode d'usine qui crée la classe appropriée correspondant à la hiérarchie de la classe des processeurs, liée à la hiérarchie de la classe des articles.



7
votes

en Java, vous pouvez effectuer plusieurs envois avec un motif de visiteur (semblable). Les implémentations de l'article n'ont pas besoin de contenir la logique de traitement, ils ont juste besoin d'un accepter () type de méthode. XXX


3 commentaires

Hmm. Donne-moi des idées, mais dans votre code, l'élément d'interface a maintenant une dépendance à l'articleProcesseur qui a une dépendance sur les classes musicalbox et de soccerball (donc pas sûr que cela compilait même)


Cela compilerait, vous pouvez avoir des dépendances croisées entre les classes de Java. Cependant, vous ne pouvez pas avoir de dépendances CORSS entre .jars, de sorte que cela ne fonctionnera pas si l'article et l'élémentProcesseur sont différents .jars.


@Jason: Oui, il compile :) C'est simplement un moyen de retourner des choses autour de sorte que, au lieu d'avoir une méthode qui tente de déterminer comment gérer le type d'élément particulier, vous avez les différents types d'articles transmis à un méthode qui a sa manipulation. L'accouplement de l'heure de la compilation peut être à la hausse en ce que, si vous aviez que si l'instance de l'instance de BLOP dans de nombreux endroits autour de l'application, il est beaucoup plus facile de manquer de mettre à jour une lorsque vous créez un nouveau type d'élément, que lorsqu'ils mettent tous une interface. cela a changé.




2
votes

Pourquoi ne pas définir une fonction de rappel à l'interface de l'élément? XXX PRE>

dans chaque classe qui implémente l'élément, tel que MusicBox, il doit implémenter la fonction de rappel. P>

public void XXXX() {
  ....
  SpecialItemProcessor specialItemProcessor = new SpecialItemProcessor(new MusicBox());
  specialItemProcessor.dispatch();
  ....
}


1 commentaires

Lisez la question: "Où je veux faire quelque chose de différent pour chaque type d'article, mais je ne veux pas définir cette action dans les différentes classes d'articles (musiquebox, machine à écrire, soccerball)."