Design Pattern Command

Anonymous
735 views

Open Source Your Knowledge, Become a Contributor

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

Create Content

Diagramme

Voici le diagramme des classes importantes que nous allons implémenter.
La Télécommande va jouer le rôle du client, les boutons jouent le rôle d'invoker, les ConcreteCommandes ConsoleOn et ConsoleOff vont éxécuter les méthodes nécessaires du receiver Console.
Uml exemple of Design Pattern Command

Première étape

On crée nos objets receiver :

  • Console :
public class Console {

	public void on(){
		System.out.println("La console est allumée");
	}
	
	public void off(){
		System.out.println("La console est éteinte");
	}
	
	public void startGame(){
		System.out.println("Jeu lancé");
	}
	
	public void stopGame(){
		System.out.println("Jeu arrêté");
	}
}
  • Radio :
public class Radio {
	
	private int volume = 0;
	
	public void on(){
		System.out.println("La radio est allumée");
	}
	
	public void off(){
		System.out.println("La radio est éteinte");
	}
	
	public void volumeUp(){
		this.volume++;
		System.out.println("Le volume est de : " + this.volume);
	}
	
	public void volumeDown(){
		this.volume--;
		System.out.println("Le volume est de : " + this.volume);
	}
}

Deuxième étape

On crée l'interface Icommande qui sera implémentée pour chaque nouvelle commande

public interface Icommande {

	public void execute();
	public void undo();
}

Troisième étape

On va créer des commandes destinées à chaque objet

Commande permettant d'allumer la console :

public class Commande_ConsoleOn implements Icommande{

	private Console console;
	
	public Commande_ConsoleOn(Console theConsole) {
		this.console = theConsole;
	}
	
	@Override
	public void execute() {
		this.console.on();		
	}

	@Override
	public void undo() {
		this.console.off();
	}
}

Commande permettant de monter le son de la radio

public class Commande_RadioVolumeUp implements Icommande{
	
	private Radio radio;
	
	public Commande_RadioVolumeUp(Radio theRadio) {
		this.radio = theRadio;
	}
	
	@Override
	public void execute() {
		this.radio.volumeUp();		
	}

	@Override
	public void undo() {
		this.radio.volumeDown();
	}
}

Quatrième étape

Création de la télécommande

public class Telecommande {
	private Icommande bouton1;
	private Icommande bouton2;
	private Icommande bouton3;
	private Icommande bouton4;
	
	public Telecommande(Icommande btn1, Icommande btn2, Icommande btn3, Icommande btn4){
		this.bouton1 = btn1;
		this.bouton2 = btn2;
		this.bouton3 = btn3;
		this.bouton4 = btn4;
	}
	
	public Telecommande(Icommande btn1, Icommande btn2){
		this.bouton1 = btn1;
		this.bouton2 = btn2;
	}
	
	public void pressBtn1(){
		this.bouton1.execute();
	}
	
	public void pressBtn2(){
		this.bouton2.execute();
	}
	
	public void pressBtn3(){
		this.bouton3.execute();
	}
	
	public void pressBtn4(){
		this.bouton4.execute();
	}
}

Nous avons ici fait le choix d'utiliser une télécommande à 4 boutons, comme vous pouvez le remarquer, aucune commande n'a été implémentée pour les boutons, ces commandes seront implémentées directement lors de la création de celle-ci.

Cinquième et dernière étape

1
21
45
52
72
92
112
132
152
172
192
212
237
261
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
// Class Console {...}
// Class Radio {...}
// Interface Icommande {...}
// class Commande_ConsoleOff implements Icommande {...}
// class Commande_ConsoleOn implements Icommande {...}
// class Commande_ConsoleStopGame implements Icommande {...}
// class Commande_ConsoleStartGame implements Icommande {...}
// class Commande_RadioOn implements Icommande {...}
// class Commande_RadioOff implements Icommande {...}
// class Commande_RadioVolumeUp implements Icommande {...}
// class Commande_RadioVolumeDown implements Icommande {...}
// class Commande_OnAll implements Icommande {...}
// class Commande_OffAll implements Icommande {...}
// class Telecommande {...}
public class Main {
public static void main(String[] args) {
// Creation télécommande Radio
Radio radio = new Radio();
Telecommande telecommandeRadio = new Telecommande(new Commande_RadioOn(radio), new Commande_RadioOff(radio),
new Commande_RadioVolumeUp(radio), new Commande_RadioVolumeDown(radio));
//Creation télécommande Console
Console console = new Console();
Telecommande telecommandeConsole = new Telecommande(new Commande_ConsoleOn(console), new Commande_ConsoleOff(console),
new Commande_ConsoleStartGame(console), new Commande_ConsoleStopGame(console));
//Test télécommande radio
telecommandeRadio.pressBtn1(); //On allume la radio
telecommandeRadio.pressBtn3(); //VolumeUp
telecommandeRadio.pressBtn3(); //VolumeUp
telecommandeRadio.pressBtn4(); //VolumeDown
telecommandeRadio.pressBtn2(); //On éteint la radio
System.out.println("");
//Test télécommande console
telecommandeConsole.pressBtn1(); //On allume la console
telecommandeConsole.pressBtn3(); //StartGame
telecommandeConsole.pressBtn4(); //StopGame
telecommandeConsole.pressBtn2(); //on éteint la console
System.out.println("");
//Et si on faisait une télécommande pour gérer l'état de chaque device...
Telecommande telecommandeMultiple = new Telecommande(new Commande_OnAll(console, radio), new Commande_OffAll(console, radio));
telecommandeMultiple.pressBtn1();
telecommandeMultiple.pressBtn2();
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Open Source Your Knowledge: become a Contributor and help others learn. Create New Content