Voici un exemple simple de la façon dont cela pourrait être divisé.
Vraisemblablement, les cartes d'un joueur sont représentées comme une 'main' ou un objet similaire (c'est-à-dire une collection de cartes). Ceci est votre modèle. Appelons donc votre modèle:
package casino.blackjack.model;
class DealtCards
{..}
Vous affichez vos cartes en utilisant peut-être un JPanel ou une autre construction Swing. Ainsi, vous pouvez mettre tous les objets qui font réellement le rendu de chaque carte dans un paquet séparé:
package casino.blackjack.view;
class DealtCardsView
{..}
Les existe indépendamment de l'objet DealtCards comment il est affiché, mais son état peut changer si un utilisateur fait quelque chose sur la GUI. Par exemple, demander à être «touché». Vraisemblablement, il pourrait y avoir un bouton pour le faire. La vue est dérivée de votre modèle. Maintenant, si un joueur décide de frapper, son objet DealtCards change. Nous voulons donc implémenter une manière de mettre à jour votre modèle. Vous pouvez le faire en utilisant une classe de contrôleur. La classe de contrôleur implémente l'interface ActionListener. Lorsqu'une action est effectuée (c'est-à-dire que l'utilisateur clique sur le bouton "hit"), le contrôleur met à jour le modèle. La vue ne peut donc pas mettre directement à jour le modèle. Il envoie juste une notification qu'une «action» s'est produite. Toute partie intéressée, en l'occurrence notre contrôleur, peut alors prendre les mesures appropriées.
package casino.blackjack.controller;
class DealtCardsController implements ActionListener
{
DealtCards cards;
DealtCardsView cardView;
public DealtCardsController(DealtCards myHand, DealtCardsView myView)
{
cards = myHand;
cardView = myView;
cardView.hitMeButton.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
cards.changed();
}
}
Vous divisez donc votre application en trois couches. Votre modèle contient uniquement l'état actuel (ou les données actuelles) et toute validation qui le contourne. Vos classes d'affichage rendent le modèle de manière appropriée. Toute interaction de l'utilisateur, sur la vue, est gérée par le contrôleur, dont la responsabilité est alors de mettre à jour le modèle.De cette façon, si vous voulez changer votre vue, (dis utiliser une applet au lieu d'une fenêtre) votre modèle s'en fout.
Désolé pour la réponse longue et sinueuse, mais espérons que cela aide un peu!
EDIT: Une belle explication MVC ici: java/gwt UI coding - clean code
Je n'ai pas comprendre à quel MVC est implémenté en Java. :( –
MVC ne nécessite pas d'implémentation dans la langue dans laquelle vous programmez. La seule condition requise est une séparation de concept lâche, c'est-à-dire le modèle, la vue et le contrôleur.Vous ne devez pas étendre un modèle ou une vue ou un contrôleur. –