diff --git a/design_pattern/src/modele/DPCommand/Command.java b/design_pattern/src/modele/DPCommand/Command.java
new file mode 100644
index 0000000000000000000000000000000000000000..58ebb151bee8f3943809d5ab81b5031524970749
--- /dev/null
+++ b/design_pattern/src/modele/DPCommand/Command.java
@@ -0,0 +1,7 @@
+package modele.DPCommand;
+
+import modele.Jeu;
+
+public interface Command {
+    void execute(Jeu jeu);
+}
\ No newline at end of file
diff --git a/design_pattern/src/modele/DPCommand/CommandCreerGuerisseur.java b/design_pattern/src/modele/DPCommand/CommandCreerGuerisseur.java
new file mode 100644
index 0000000000000000000000000000000000000000..6f4cb32be85e573c6157d16e26c79ff07580ed54
--- /dev/null
+++ b/design_pattern/src/modele/DPCommand/CommandCreerGuerisseur.java
@@ -0,0 +1,13 @@
+package modele.DPCommand;
+
+import modele.DPFabrique.ConstructeurGuerisseur;
+import modele.DPFabrique.ConstructeurSorcier;
+import modele.Jeu;
+
+public class CommandCreerGuerisseur implements Command{
+    @Override
+    public void execute(Jeu jeu) {
+        jeu.setConstructeur(new ConstructeurGuerisseur());
+        jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage());
+    }
+}
diff --git a/design_pattern/src/modele/DPCommand/CommandCreerGuerrier.java b/design_pattern/src/modele/DPCommand/CommandCreerGuerrier.java
new file mode 100644
index 0000000000000000000000000000000000000000..47fcd2726dcba62ce01f3e44751bd9bab8b90405
--- /dev/null
+++ b/design_pattern/src/modele/DPCommand/CommandCreerGuerrier.java
@@ -0,0 +1,14 @@
+package modele.DPCommand;
+
+import modele.DPFabrique.ConstructeurGuerisseur;
+import modele.DPFabrique.ConstructeurGuerrier;
+import modele.DPFabrique.ConstructeurSorcier;
+import modele.Jeu;
+
+public class CommandCreerGuerrier implements Command{
+    @Override
+    public void execute(Jeu jeu) {
+        jeu.setConstructeur(new ConstructeurGuerrier());
+        jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage());
+    }
+}
diff --git a/design_pattern/src/modele/DPCommand/CommandCreerRoi.java b/design_pattern/src/modele/DPCommand/CommandCreerRoi.java
new file mode 100644
index 0000000000000000000000000000000000000000..8089ca09f87e09ee57449f8b47f48ab9dc3f3366
--- /dev/null
+++ b/design_pattern/src/modele/DPCommand/CommandCreerRoi.java
@@ -0,0 +1,13 @@
+package modele.DPCommand;
+
+import modele.DPFabrique.ConstructeurRoi;
+import modele.DPFabrique.ConstructeurSorcier;
+import modele.Jeu;
+
+public class CommandCreerRoi implements Command{
+    @Override
+    public void execute(Jeu jeu) {
+        jeu.setConstructeur(new ConstructeurRoi());
+        jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage());
+    }
+}
diff --git a/design_pattern/src/modele/DPCommand/CommandCreerSorcier.java b/design_pattern/src/modele/DPCommand/CommandCreerSorcier.java
new file mode 100644
index 0000000000000000000000000000000000000000..fb5c99e948cf81f028246bddd88c3f6cabc41ca1
--- /dev/null
+++ b/design_pattern/src/modele/DPCommand/CommandCreerSorcier.java
@@ -0,0 +1,12 @@
+package modele.DPCommand;
+
+import modele.DPFabrique.ConstructeurSorcier;
+import modele.Jeu;
+
+public class CommandCreerSorcier implements Command{
+    @Override
+    public void execute(Jeu jeu) {
+        jeu.setConstructeur(new ConstructeurSorcier());
+        jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage());
+    }
+}
diff --git a/design_pattern/src/modele/DPCommand/Invoker.java b/design_pattern/src/modele/DPCommand/Invoker.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba3d8d88a7b21b0a829a99fbe040e720c9ce3a55
--- /dev/null
+++ b/design_pattern/src/modele/DPCommand/Invoker.java
@@ -0,0 +1,31 @@
+package modele.DPCommand;
+
+import modele.Jeu;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Invoker {
+    private List<Command> commandHistory = new ArrayList<>();
+    private Jeu jeu;
+
+    public Invoker(Jeu jeu){
+        this.jeu= jeu;
+    }
+    public void executeCommand(Command command) {
+        command.execute(jeu);
+        commandHistory.add(command);
+    }
+
+    public void executeLastCommand(){
+        commandHistory.get(commandHistory.size()).execute(jeu);
+    }
+
+    public void undoLastCommand() {
+        if (!commandHistory.isEmpty()) {
+            Command lastCommand = commandHistory.remove(commandHistory.size() - 1);
+
+        }
+    }
+}
+
diff --git a/design_pattern/src/modele/DPCommand/Receiver.java b/design_pattern/src/modele/DPCommand/Receiver.java
new file mode 100644
index 0000000000000000000000000000000000000000..998d03c94f9265c9b7fef3692c9ef730edd8509b
--- /dev/null
+++ b/design_pattern/src/modele/DPCommand/Receiver.java
@@ -0,0 +1,23 @@
+package modele.DPCommand;
+
+import modele.DPStrategie.ConcreteStrategieAgressif;
+import modele.DPStrategie.ConcreteStrategieDefensif;
+import modele.DPStrategie.ConcreteStrategieNeutre;
+import modele.Personnage;
+
+public class Receiver {
+    public void actionStrategie(Personnage personnage, int strat) {
+        switch (strat) {
+            case 1:
+                personnage.setStrategie(new ConcreteStrategieNeutre());
+                break;
+            case 2:
+                personnage.setStrategie(new ConcreteStrategieAgressif());
+                break;
+            case 3:
+                personnage.setStrategie(new ConcreteStrategieDefensif());
+                break;
+        }
+    }
+
+}
diff --git a/design_pattern/src/modele/DegatVisiteur.java b/design_pattern/src/modele/DPVisiteur/DegatVisiteur.java
similarity index 94%
rename from design_pattern/src/modele/DegatVisiteur.java
rename to design_pattern/src/modele/DPVisiteur/DegatVisiteur.java
index 8e41788b61bd5fd2e388962fdabb4f525629d6af..04f70479c8b98a4d0b9eaf2a39e48670d42b976b 100644
--- a/design_pattern/src/modele/DegatVisiteur.java
+++ b/design_pattern/src/modele/DPVisiteur/DegatVisiteur.java
@@ -1,5 +1,6 @@
-package modele;
+package modele.DPVisiteur;
 
+import modele.*;
 import modele.DPVisiteur.VisiteurGroupe;
 
 public class DegatVisiteur implements VisiteurGroupe {
diff --git a/design_pattern/src/modele/DialogueTerminal.java b/design_pattern/src/modele/DialogueTerminal.java
index 8f6d71a3472b22a50fe7ea1fc9b82fdd2455ded0..1eaa11c358724e8e6500c803eac26446b6641cac 100644
--- a/design_pattern/src/modele/DialogueTerminal.java
+++ b/design_pattern/src/modele/DialogueTerminal.java
@@ -1,10 +1,10 @@
 package modele;
 
+import modele.DPCommand.*;
 import modele.DPFabrique.*;
 import modele.DPStrategie.ConcreteStrategieAgressif;
 import modele.DPStrategie.ConcreteStrategieDefensif;
 import modele.DPStrategie.ConcreteStrategieNeutre;
-import modele.Jeu;
 
 import java.util.ArrayList;
 import java.util.Scanner;
@@ -12,10 +12,12 @@ import java.util.Scanner;
 public class DialogueTerminal {
     private Jeu jeu;
     private int finDePartie;
+    private Invoker invoker;
 
     public DialogueTerminal(Jeu jeu){
         this.jeu = jeu;
         this.finDePartie = 0;
+        invoker = new Invoker(jeu);
     }
     public void debutPartie(){
         Scanner scan = new Scanner(System.in);
@@ -102,20 +104,16 @@ public class DialogueTerminal {
     private void ajouterPersonnage(int choix){
         switch (choix){
             case 1:
-                jeu.setConstructeur(new ConstructeurGuerrier());
-                jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage());
+                invoker.executeCommand(new CommandCreerGuerrier());
                 break;
             case 2:
-                jeu.setConstructeur(new ConstructeurRoi());
-                jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage());
+                invoker.executeCommand(new CommandCreerRoi());
                 break;
             case 3:
-                jeu.setConstructeur(new ConstructeurGuerisseur());
-                jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage());
+                invoker.executeCommand(new CommandCreerGuerisseur());
                 break;
             case 4:
-                jeu.setConstructeur(new ConstructeurSorcier());
-                jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage());
+                invoker.executeCommand(new CommandCreerSorcier());
                 break;
         }
     }
@@ -144,20 +142,19 @@ public class DialogueTerminal {
         while (strat < 0 || strat > 2) {
             System.out.println("Votre personnage : " + jeu.getEquipe().getPersonnage(jeu.getNbAttaqueEquipe()) + " va attaquer" +
                     "le personnage ennemi : " + jeu.getEquipeEnnemi().getPersonnage(jeu.getNbAttaqueEquipe()));
-            System.out.println("Choisissez votre stratégie pour ce tour :\n0: La même que précédement\n1: Neutre\n2: Agressif\n3: Défensif");
+            System.out.println("Choisissez votre stratégie pour ce tour :\n0: Neutre\n1: Agressif\n2: Défensif");
             strat = Integer.parseInt(scan.nextLine());
         }
+        Personnage personnage = jeu.getEquipe().getPersonnage(jeu.getNbAttaqueEquipe());
         switch (strat) {
             case 0:
-
+                 personnage.setStrategie(new ConcreteStrategieNeutre());
+                break;
             case 1:
-                jeu.getEquipe().getPersonnage(jeu.getNbAttaqueEquipe()).setStrategie(new ConcreteStrategieNeutre());
+                personnage.setStrategie(new ConcreteStrategieAgressif());
                 break;
             case 2:
-                jeu.getEquipe().getPersonnage(jeu.getNbAttaqueEquipe()).setStrategie(new ConcreteStrategieAgressif());
-                break;
-            case 3:
-                jeu.getEquipe().getPersonnage(jeu.getNbAttaqueEquipe()).setStrategie(new ConcreteStrategieDefensif());
+                personnage.setStrategie(new ConcreteStrategieDefensif());
                 break;
         }
     }
diff --git a/design_pattern/src/tests/DegatVisiteurTest.java b/design_pattern/src/tests/DegatVisiteurTest.java
index ed1523d305cef1d55788e6d3494cdd7a0ee79124..ab5408e5b5c34877290147df69fb3caf5544bcd0 100644
--- a/design_pattern/src/tests/DegatVisiteurTest.java
+++ b/design_pattern/src/tests/DegatVisiteurTest.java
@@ -1,6 +1,7 @@
 package tests;
 
 import modele.*;
+import modele.DPVisiteur.DegatVisiteur;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;