Td04 : design patterns avec correction - design patterns - t

TD04. Design Patterns (Correction)

1. Modélisation d’une unité d’un jeu de stratégie

On s’intéresse à la modélisation d’une unité dans un jeu de stratégie. Une unité peut être un soldat, un char, un avion, etc. Les unités ont des capacités de déplacement et de combat variables. Par exemple, un soldat peut être équipé d’un fusil mitrailleur, d’un lance-flammes, d’un lance-missiles, etc.

Question 1 : Architecture pour des unités aux comportements interchangeables

Pour modéliser ces unités avec des comportements interchangeables, on utilise le pattern Stratégie. Ce design pattern permet de définir une famille d’algorithmes, d’encapsuler chacun d’eux et de les rendre interchangeables.

2. Système de vente de véhicules

Au sein d’un système de vente de véhicules, il est nécessaire de représenter les sociétés clientes, notamment pour leur proposer des offres de maintenance adaptées à leur parc de véhicules.

Question 2 : Modélisation des sociétés clientes avec le pattern Composite

On utilise le pattern Composite pour structurer les sociétés clientes, qu’elles soient des sociétés mères ou sans filiales.

Classes implémentées

SocieteSansFiliale (classe concrète) :

public class SocieteSansFiliale extends Societe {
    public boolean ajouteFiliale(Societe filiale) {
        return false;
    }
    public double calculeCoutEntretien() {
        return nbrVehicules * coutUnitVehicule;
    }
}

SocieteMere (classe concrète) :

public class SocieteMere extends Societe {
    protected List filiales = new ArrayList();

    public boolean ajouteFiliale(Societe filiale) {
        return filiales.add(filiale);
    }
    public double calculeCoutEntretien() {
        double cout = 0.0;
        for (Societe filiale : filiales) {
            cout = cout + filiale.calculeCoutEntretien();
        }
        return cout + nbrVehicules * coutUnitVehicule;
    }
}

3. Répertoires et fichiers

On dispose des classes suivantes pour manipuler des fichiers et répertoires :

Question 3 : Intégration d’une gestion de fichiers avec le pattern Adaptateur

Pour intégrer la gestion de fichiers via la classe File tout en maximisant la réutilisation du code existant, on peut utiliser le pattern Adaptateur. Ce pattern permet d’adapter une classe existante (ici File) à une interface attendue (ici IFichier).

Voici une architecture possible :

  • IFichier : Interface définissant les méthodes nécessaires pour manipuler un fichier.
  • FichierAdaptateur : Classe adaptatrice implémentant IFichier et utilisant une instance de File par délégation.

Question 4 : Modification avec une classe abstraite FichierAbstrait

Pour éviter l’héritage multiple, on utilise un adaptateur d’instance (ou d’objet). Voici comment implémenter cette solution :

  • FichierAbstrait : Classe abstraite définissant les méthodes communes pour tous les fichiers.
  • FichierAdaptateur : Classe concrète héritant de FichierAbstrait et utilisant une instance de File pour déléguer les appels.

FAQ

1. Qu’est-ce que le pattern Stratégie ?

Le pattern Stratégie permet de séparer le comportement d’un objet de sa structure en définissant une interface commune pour les comportements et en les encapsulant dans des classes distinctes. Cela facilite l’ajout ou le changement de comportements sans modifier les classes clientes.

2. À quoi sert le pattern Composite ?

Le pattern Composite permet de traiter des objets individuels et des compositions d’objets de manière uniforme. Dans ce cas, il permet de représenter une société mère et ses filiales comme un seul objet tout en conservant la capacité d’ajouter ou de manipuler des filiales individuellement.

3. Quelle est la différence entre un adaptateur de classe et un adaptateur d’instance ?

Un adaptateur de classe utilise l’héritage pour adapter une classe à une interface, ce qui peut poser des problèmes si l’héritage multiple est utilisé. Un adaptateur d’instance utilise la composition et délègue les appels à une instance de la classe adaptée, évitant ainsi les limitations liées à l’héritage multiple.

Cela peut vous intéresser :

Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne