diff --git a/design_pattern/src/Arme.java b/design_pattern/src/modele/Arme.java
similarity index 85%
rename from design_pattern/src/Arme.java
rename to design_pattern/src/modele/Arme.java
index ef77a222d4b27685beea318b823c4cc46f9af608..d689d4ee47edfabadb40be6dc40a7f2fda22ae00 100644
--- a/design_pattern/src/Arme.java
+++ b/design_pattern/src/modele/Arme.java
@@ -1,3 +1,5 @@
+package modele;
+
 public abstract class Arme {
     protected int degat;
     protected String nom;
@@ -9,6 +11,10 @@ public abstract class Arme {
         this.poids = poids;
     }
 
+    public void augmenterDegat(int augmentation){
+        this.degat += augmentation;
+    }
+
     public void setNom(String nom) {
         this.nom = nom;
     }
diff --git a/design_pattern/src/BaguetteMagique.java b/design_pattern/src/modele/BaguetteMagique.java
similarity index 95%
rename from design_pattern/src/BaguetteMagique.java
rename to design_pattern/src/modele/BaguetteMagique.java
index 097bcb520b22cc63d0ff229881c8045f1c24203f..f01f5670d56d2b3021aca9059940f9316971cdec 100644
--- a/design_pattern/src/BaguetteMagique.java
+++ b/design_pattern/src/modele/BaguetteMagique.java
@@ -1,3 +1,5 @@
+package modele;
+
 public class BaguetteMagique extends Arme{
     private int soin;
 
diff --git a/design_pattern/src/BatonDeSorcier.java b/design_pattern/src/modele/BatonDeSorcier.java
similarity index 95%
rename from design_pattern/src/BatonDeSorcier.java
rename to design_pattern/src/modele/BatonDeSorcier.java
index 5862fdc829e003110efa440165d2a1305cc58ef3..1d959a80262e3c58f94508364e63bb49aef893bc 100644
--- a/design_pattern/src/BatonDeSorcier.java
+++ b/design_pattern/src/modele/BatonDeSorcier.java
@@ -1,3 +1,5 @@
+package modele;
+
 public class BatonDeSorcier extends Arme{
     private String pouvoir;
 
diff --git a/design_pattern/src/modele/DegatVisiteur.java b/design_pattern/src/modele/DegatVisiteur.java
new file mode 100644
index 0000000000000000000000000000000000000000..9beb578477f709ddcb836f6c50448d548a9ab644
--- /dev/null
+++ b/design_pattern/src/modele/DegatVisiteur.java
@@ -0,0 +1,23 @@
+package modele;
+
+public class DegatVisiteur implements VisiteurPers{
+    @Override
+    public void visiterGuerrier(Guerrier guerrier) {
+        guerrier.getArme().augmenterDegat(10);
+    }
+
+    @Override
+    public void visiterRoi(Roi roi) {
+        roi.getArme().augmenterDegat(10);
+    }
+
+    @Override
+    public void visiterSorcier(Sorcier sorcier) {
+        sorcier.getArme().augmenterDegat(10);
+    }
+
+    @Override
+    public void visiterGuerisseur(Guerisseur guerisseur) {
+        guerisseur.getArme().augmenterDegat(10);
+    }
+}
diff --git a/design_pattern/src/Epee.java b/design_pattern/src/modele/Epee.java
similarity index 95%
rename from design_pattern/src/Epee.java
rename to design_pattern/src/modele/Epee.java
index 189817f29830dde20230cae307c4bfb54c19e31f..4354b13f7d3b73101cbd012dbc544feea7a664c0 100644
--- a/design_pattern/src/Epee.java
+++ b/design_pattern/src/modele/Epee.java
@@ -1,3 +1,5 @@
+package modele;
+
 public class Epee extends Arme{
     private int longueur;
 
diff --git a/design_pattern/src/Guerisseur.java b/design_pattern/src/modele/Guerisseur.java
similarity index 76%
rename from design_pattern/src/Guerisseur.java
rename to design_pattern/src/modele/Guerisseur.java
index 673b6cd08f31ea9da0ac61e3367b142aa578c2c0..ef1be417427912c60924f5f0573839e1036f77a5 100644
--- a/design_pattern/src/Guerisseur.java
+++ b/design_pattern/src/modele/Guerisseur.java
@@ -1,3 +1,5 @@
+package modele;
+
 public class Guerisseur extends Personnage{
     private int sagesse;
 
@@ -13,4 +15,8 @@ public class Guerisseur extends Personnage{
     public int getSagesse() {
         return sagesse;
     }
+
+    public void accepter(VisiteurPers visiteur) {
+        visiteur.visiterGuerisseur(this);
+    }
 }
diff --git a/design_pattern/src/Guerrier.java b/design_pattern/src/modele/Guerrier.java
similarity index 76%
rename from design_pattern/src/Guerrier.java
rename to design_pattern/src/modele/Guerrier.java
index 1c47ae8fa5ce38c039fc5441519b2de03233c4e8..746e056688088f32a17f3381aa12d910ec5670df 100644
--- a/design_pattern/src/Guerrier.java
+++ b/design_pattern/src/modele/Guerrier.java
@@ -1,3 +1,5 @@
+package modele;
+
 public class Guerrier extends Personnage{
     private int force;
 
@@ -13,4 +15,8 @@ public class Guerrier extends Personnage{
     public int getForce() {
         return force;
     }
+
+    public void accepter(VisiteurPers visiteur) {
+        visiteur.visiterGuerrier(this);
+    }
 }
diff --git a/design_pattern/src/modele/NiveauVisiteur.java b/design_pattern/src/modele/NiveauVisiteur.java
new file mode 100644
index 0000000000000000000000000000000000000000..9af9f75c9e67c62bf5406a8bdce81b58dc19cca0
--- /dev/null
+++ b/design_pattern/src/modele/NiveauVisiteur.java
@@ -0,0 +1,23 @@
+package modele;
+
+public class NiveauVisiteur implements VisiteurPers{
+    @Override
+    public void visiterGuerrier(Guerrier guerrier) {
+        guerrier.augmenterNiveau(1);
+    }
+
+    @Override
+    public void visiterRoi(Roi roi) {
+        roi.augmenterNiveau(1);
+    }
+
+    @Override
+    public void visiterSorcier(Sorcier sorcier) {
+        sorcier.augmenterNiveau(1);
+    }
+
+    @Override
+    public void visiterGuerisseur(Guerisseur guerisseur) {
+        guerisseur.augmenterNiveau(1);
+    }
+}
diff --git a/design_pattern/src/Personnage.java b/design_pattern/src/modele/Personnage.java
similarity index 84%
rename from design_pattern/src/Personnage.java
rename to design_pattern/src/modele/Personnage.java
index 018f7e89d4bf13785d765f5a05a3fea9a8ed381a..ddb0161dc04c22a67d620dd13d869e30ab6d4367 100644
--- a/design_pattern/src/Personnage.java
+++ b/design_pattern/src/modele/Personnage.java
@@ -1,3 +1,5 @@
+package modele;
+
 public abstract class Personnage {
     protected int pointsDeVie;
     protected int niveau;
@@ -11,6 +13,10 @@ public abstract class Personnage {
         this.arme = arme;
     }
 
+    public void augmenterNiveau(int augmentation){
+        this.niveau += augmentation;
+    }
+
     public void setNom(String nom) {
         this.nom = nom;
     }
@@ -42,4 +48,6 @@ public abstract class Personnage {
     public Arme getArme() {
         return arme;
     }
+    public abstract void accepter(VisiteurPers visiteur);
+
 }
diff --git a/design_pattern/src/Roi.java b/design_pattern/src/modele/Roi.java
similarity index 84%
rename from design_pattern/src/Roi.java
rename to design_pattern/src/modele/Roi.java
index f802e36ec60b6a285f8f81c6bb6c74b9577ef665..c23d4d514bf6a823907ff29d57aec16c592ad958 100644
--- a/design_pattern/src/Roi.java
+++ b/design_pattern/src/modele/Roi.java
@@ -1,3 +1,5 @@
+package modele;
+
 public class Roi extends Personnage{
     private int force;
     private String royaume;
@@ -23,4 +25,8 @@ public class Roi extends Personnage{
     public String getRoyaume() {
         return royaume;
     }
+
+    public void accepter(VisiteurPers visiteur) {
+        visiteur.visiterRoi(this);
+    }
 }
diff --git a/design_pattern/src/Sorcier.java b/design_pattern/src/modele/Sorcier.java
similarity index 79%
rename from design_pattern/src/Sorcier.java
rename to design_pattern/src/modele/Sorcier.java
index 8b229fe34e118b5319a97973496854cd45c35428..48077973ebe3cac3229eae6b42ddffce175dd564 100644
--- a/design_pattern/src/Sorcier.java
+++ b/design_pattern/src/modele/Sorcier.java
@@ -1,3 +1,5 @@
+package modele;
+
 public class Sorcier extends Personnage{
     private int intelligence;
 
@@ -13,4 +15,8 @@ public class Sorcier extends Personnage{
     public int getIntelligence() {
         return intelligence;
     }
+
+    public void accepter(VisiteurPers visiteur) {
+        visiteur.visiterSorcier(this);
+    }
 }
diff --git a/design_pattern/src/modele/VisiteurPers.java b/design_pattern/src/modele/VisiteurPers.java
new file mode 100644
index 0000000000000000000000000000000000000000..50e74f0fc75d0ef69c94e545f297b8675ad88e64
--- /dev/null
+++ b/design_pattern/src/modele/VisiteurPers.java
@@ -0,0 +1,9 @@
+package modele;
+
+public interface VisiteurPers {
+
+    void visiterGuerrier(Guerrier guerrier);
+    void visiterRoi(Roi roi);
+    void visiterSorcier(Sorcier sorcier);
+    void visiterGuerisseur(Guerisseur guerisseur);
+}
diff --git a/design_pattern/src/tests/DegatVisiteurTest.java b/design_pattern/src/tests/DegatVisiteurTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..4b4e83aaa65b4907c1ac27cc5351a58d8fd44510
--- /dev/null
+++ b/design_pattern/src/tests/DegatVisiteurTest.java
@@ -0,0 +1,62 @@
+package tests;
+
+import modele.*;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class DegatVisiteurTest {
+    private DegatVisiteur degatVisiteur;
+    private Epee epee;
+    private BaguetteMagique baguetteMagique;
+    private BatonDeSorcier batonDeSorcier;
+    private Roi roi;
+    private Guerrier guerrier;
+    private Guerisseur guerisseur;
+    private Sorcier sorcier;
+    @BeforeEach
+    void setUp() {
+        degatVisiteur = new DegatVisiteur();
+        epee = new Epee(20, "epee", 2.0, 10);
+        baguetteMagique = new BaguetteMagique(10, "baguette", 1.0,10);
+        batonDeSorcier = new BatonDeSorcier(15, "baton", 1.5, "pouvoir");
+        roi = new Roi(100, 1, "roi", epee, 20, "royaume");
+        guerrier = new Guerrier(80, 1, "guerrier", epee, 30);
+        guerisseur = new Guerisseur(50, 1, "gueisseur", baguetteMagique, 40);
+        sorcier = new Sorcier(40, 1, "sorcier", batonDeSorcier, 20);
+    }
+
+    @Test
+    void testVisiterGuerrier() {
+        int degat_avant = guerrier.getArme().getDegat();
+        guerrier.accepter(degatVisiteur);
+        int degat_apres = guerrier.getArme().getDegat();
+        assertNotEquals(degat_avant, degat_apres);
+    }
+
+    @Test
+    void testVisiterRoi() {
+        int degat_avant = roi.getArme().getDegat();
+        roi.accepter(degatVisiteur);
+        int degat_apres = roi.getArme().getDegat();
+        assertNotEquals(degat_avant, degat_apres);
+    }
+
+    @Test
+    void testVisiterSorcier() {
+        int degat_avant = sorcier.getArme().getDegat();
+        sorcier.accepter(degatVisiteur);
+        int degat_apres = sorcier.getArme().getDegat();
+        assertNotEquals(degat_avant, degat_apres);
+    }
+
+    @Test
+    void testVisiterGuerisseur() {
+        int degat_avant = guerisseur.getArme().getDegat();
+        guerisseur.accepter(degatVisiteur);
+        int degat_apres = guerisseur.getArme().getDegat();
+        assertNotEquals(degat_avant, degat_apres);
+    }
+}
\ No newline at end of file
diff --git a/design_pattern/src/tests/NiveauVisiteurTest.java b/design_pattern/src/tests/NiveauVisiteurTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..d6c6f27aa2297609db95e1f5d45fa9540b59ef67
--- /dev/null
+++ b/design_pattern/src/tests/NiveauVisiteurTest.java
@@ -0,0 +1,61 @@
+package tests;
+
+import modele.*;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class NiveauVisiteurTest {
+    private NiveauVisiteur niveauVisiteur;
+    private Epee epee;
+    private BaguetteMagique baguetteMagique;
+    private BatonDeSorcier batonDeSorcier;
+    private Roi roi;
+    private Guerrier guerrier;
+    private Guerisseur guerisseur;
+    private Sorcier sorcier;
+    @BeforeEach
+    void setUp() {
+        niveauVisiteur = new NiveauVisiteur();
+        epee = new Epee(20, "epee", 2.0, 10);
+        baguetteMagique = new BaguetteMagique(10, "baguette", 1.0,10);
+        batonDeSorcier = new BatonDeSorcier(15, "baton", 1.5, "pouvoir");
+        roi = new Roi(100, 1, "roi", epee, 20, "royaume");
+        guerrier = new Guerrier(80, 1, "guerrier", epee, 30);
+        guerisseur = new Guerisseur(50, 1, "gueisseur", baguetteMagique, 40);
+        sorcier = new Sorcier(40, 1, "sorcier", batonDeSorcier, 20);
+    }
+
+    @Test
+    void visiterGuerrier() {
+        int niveau_avant = guerrier.getNiveau();
+        guerrier.accepter(niveauVisiteur);
+        int niveau_apres = guerrier.getNiveau();
+        assertNotEquals(niveau_avant, niveau_apres);
+    }
+
+    @Test
+    void visiterRoi() {
+        int niveau_avant = roi.getNiveau();
+        roi.accepter(niveauVisiteur);
+        int niveau_apres = roi.getNiveau();
+        assertNotEquals(niveau_avant, niveau_apres);
+    }
+
+    @Test
+    void visiterSorcier() {
+        int niveau_avant = sorcier.getNiveau();
+        sorcier.accepter(niveauVisiteur);
+        int niveau_apres = sorcier.getNiveau();
+        assertNotEquals(niveau_avant, niveau_apres);
+    }
+
+    @Test
+    void visiterGuerisseur() {
+        int niveau_avant = guerisseur.getNiveau();
+        guerisseur.accepter(niveauVisiteur);
+        int niveau_apres = guerisseur.getNiveau();
+        assertNotEquals(niveau_avant, niveau_apres);
+    }
+}
\ No newline at end of file