Design Pattern Strategy

Lhudram
890 views

Open Source Your Knowledge, Become a Contributor

Technology knowledge has to be shared and made accessible for free. Join the movement.

Create Content

Mise en situation :

Prenons un exemple concret : vous naviguez sur un site d'e-commerce de votre choix. Un article vous intéresse, vous voulez l'acheter : vous l'ajoutez au panier.
Vous ouvrez votre panier, et là, le site vous demande d'effectuer l'action abstraite de "payer". Elle ne vous paraît pas abstraite, car vous auriez des idées d'implémentations ? N'avez vous qu'une seule idée d'implémentation de cette méthode ?
Il est possible de payer de différentes manières : directement par carte, par Paypal... La méthode "payer" peut être implémentée de différentes manières : c'est là l'intérêt du Pattern Strategy.

UML Diagram

Implémentation

On commence par l’interface Strategy, qui implémente la/les méthodes qui changeront. Ici, c'est la méthode payer qu'on déclare (avec un montant, bien entendu).

public interface PaiementStrategy {
	public void payer(int montant);
}

On implémente ensuite les deux classes qui l'implémenteront :

public class PaypalStrategy implements PaiementStrategy{

	private String id;
	private String password;

	public PaypalStrategy(String email, String pass){
		this.id=id;
		this.password=pass;
	}

	@Override
	public void payer(int montant) {
		System.out.println(montant + "€ payés par Paypal.");
	}

}
public class CarteDeCreditStrategy implements PaiementStrategy {

	private String numeroCarte;
	private String cryptogramme;
	private String dateExpiration;

	public CarteDeCreditStrategy(String num, String crypto, String date) {
		this.numeroCarte = num;
		this.cryptogramme = crypto;
		this.dateExpiration = date;
	}

	@Override
	public void payer(int montant) {
		System.out.println(montant + "€ payés par carte de crédit.");
	}

}

Enfin, on implémente la classe qui se servira du pattern :

public class Article {

	private String nom;
	private int prix;

	public Article(String nom, int prix) {
		this.nom = nom;
		this.prix = prix;
	}

	public String getNom() {
		return this.nom;
	}

	public int getPrix() {
		return this.prix;
	}

	public void payer(PaiementStrategy methode){
		int montant=this.getPrix();
		methode.payer(montant);
	}
}
1
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// {...}
class Main {
public static void main(String[] args) {
Article article1 = new Article("Livre : 'Tout savoir sur le pattern Strategy'",25);
Article article2 = new Article("Piano steinway & sons d274",155690);
article1.payer(new PaypalStrategy("idExemple", "passwordExemple"));
//pay by credit card
article2.payer(new CarteDeCreditStrategy( "1234567890123456", "786", "12/15"));
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Quizz !

A quelle famille de Patterns le pattern Strategy apartient-il ?
Le pattern Strategy :
Quel est le principe SOLID dont le pattern Strategy empêche la violation ?
"Il a vraiment peu d’inconvénients ! Je vais pourvoir l’utiliser partout !" Cette personne :
Open Source Your Knowledge: become a Contributor and help others learn. Create New Content