Font size
WorksheetsStrategy Pattern
Total questions: 15
Worksheet time: 20mins
À quel exemple pensez-vous lorsqu’on vous parle du Strategy Pattern ?
Quelle est la définition simple du Pattern Strategy ?
Il permet de créer une seule instance d'une classe.
Sépare la construction d'un objet complexe de sa représentation.
Il définit une famille d'algorithmes interchangeables.
Il permet de parcourir une liste sans en connaître la structure.
Lequel de ces cas serait le plus adapté à l’utilisation du Strategy Pattern ?
Gérer plusieurs pages d’un site avec des routes différentes.
Proposer plusieurs types de tris à l'utilisateur sur un site d'ecommerce.
Stocker une configuration globale partagée par toute l’application
Répéter une même action à intervalle régulier dans une boucle.
Que contient obligatoirement la classe "Contexte" pour que le pattern fonctionne ?
Un setter (ou constructeur) pour initialiser cette variable.
Une copie du code de chaque algorithme.
Une référence (variable) vers l'Interface de stratégie.
Une méthode qui délègue l'exécution à la stratégie (strategy.execute()).
Pourquoi utilise-t-on une Interface (ou classe abstraite) commune ?
Pour empêcher les développeurs de créer de nouvelles stratégies.
C'est juste pour faire joli dans le code.
Pour que le Contexte sache quelles méthodes il peut appeler, quelle que soit la stratégie réelle.
Pour améliorer la vitesse d'exécution du processeur.
Dans le Strategy Pattern, qui est responsable de choisir et d'instancier la stratégie concrète (ex: new PayPalStrategy()) pour la passer au contexte ?
(a)
Que se passe-t-il si vous appelez la méthode du contexte sans avoir défini de stratégie (strategy est null) ?
Le programme choisit une stratégie au hasard.
Le compilateur refuse de lancer le programme.
Une erreur d'exécution (NullPointerException) se produit.
Le programme ne fait rien et continue.
Pour chaque numéro (1 à 4), donnez le nom du composant et dites en une phrase à quoi il sert.
On cherche à créer plusieurs types de paiements en Java : (REMPLACER [] par la bonne réponse)
public [] PaiementStrategy {
void payer(int montant);
}
(a)
Maintenant, on cherche à créer le type de paiement Paypal.
Quesqu'il manque dans cette définition ?
public class PayPalStrategy { ... }
(a)
Quel est le principe SOLID principal respecté par ce pattern ?
OCP (Open/Closed Principle) - Ouvert à l'extension, fermé à la modif.
SRP (Single Responsibility Principle) - Une seule responsabilité.
LSP (Liskov Substitution Principle).
ISP (Interface Segregation Principle).
Quels sont les signes d'alerte (Code Smells) indiquant qu'il faut refactoriser vers Strategy ?
Présence de longs switch / case basés sur un type.
Présence de nombreux if / else if qui changent le comportement d'une méthode.
Une classe possède trop de méthodes privées.
Un algorithme change souvent et vous oblige à modifier la classe principale.
Complétez la phrase :
"Le Contexte dépend de l'[ (a) ] et non des classes concrètes."
Donnez une raison de NE PAS utiliser le pattern Strategy même si vous avez plusieurs choix possibles
Vous avez implémenté une Strategy pour calculer des itinéraires (Voiture, Vélo). Demain, votre chef demande d'ajouter "Trottinette"
Listez exactement les seuls fichiers que vous devez ajouter/modifier et lequels ne doivent pas être modifié
