Back
Close

Design Pattern Command

leger50
3,326 views

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

// Class Console { autofold
class Console {
public void on(){
System.out.println("La console est allumée");
}
public void off(){
System.out.println("La console est eteinte");
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Go to tech.io
codingame x discord
Join the CodinGame community on Discord to chat about puzzle contributions, challenges, streams, blog articles - all that good stuff!
JOIN US ON DISCORD
Online Participants