Observer Pattern

This commit is contained in:
aminecmi 2014-10-03 17:20:49 +02:00
parent 719097fe69
commit eb4e192cad
10 changed files with 108 additions and 22 deletions

View File

@ -1,5 +1,4 @@
import Comportements.ComportementAPiedAvecHache; import Person.eMode;
import Comportements.ComportementParlerCommeUnePrincesse;
public class Main { public class Main {
public static void main(String[] args){ public static void main(String[] args){
@ -8,9 +7,7 @@ public class Main {
System.out.println(s.afficheTous()); System.out.println(s.afficheTous());
System.out.println(s.emmetreUnSonTous()); System.out.println(s.emmetreUnSonTous());
System.out.println(s.lancerCombar()); System.out.println(s.lancerCombar());
s.changerComportementCombat(s.liste.get(0), new ComportementAPiedAvecHache()); s.changerEtat(eMode.GUERRE);
s.changerComportementEmmetreSon(s.liste.get(0), new ComportementParlerCommeUnePrincesse());
System.out.println(s.emmetreUnSonTous());
System.out.println(s.lancerCombar()); System.out.println(s.lancerCombar());
} }
} }

View File

@ -1,13 +1,13 @@
package Person; package Person;
import Comportements.ComportementCrier;
import Comportements.ComportementCombatAvecCheval; import Comportements.ComportementCombatAvecCheval;
import Comportements.ComportementCrier;
public class Chevalier extends Personnage { public class Chevalier extends Personnage {
public Chevalier(String nom) { public Chevalier(Organisation etatMajor, String nom) {
super(nom); super(etatMajor, nom);
this.comportementCombat = new ComportementCombatAvecCheval(); this.comportementCombat = new ComportementCombatAvecCheval();
this.comportementEmmetreSon = new ComportementCrier(); this.comportementEmmetreSon = new ComportementCrier();
} }

View File

@ -4,8 +4,8 @@ import Comportements.ComportementAPiedAvecHache;
import Comportements.ComportementCrier; import Comportements.ComportementCrier;
public class Fantasssin extends Personnage { public class Fantasssin extends Personnage {
public Fantasssin(String nom) { public Fantasssin(Organisation etatMajor, String nom) {
super(nom); super(etatMajor, nom);
this.comportementCombat = new ComportementAPiedAvecHache(); this.comportementCombat = new ComportementAPiedAvecHache();
this.comportementEmmetreSon = new ComportementCrier(); this.comportementEmmetreSon = new ComportementCrier();
} }

View File

@ -0,0 +1,5 @@
package Person;
public interface ObservateurAbstrait {
public void update(eMode comportement);
}

View File

@ -0,0 +1,29 @@
package Person;
public class Organisation extends SujetObserveAbstrait {
protected eMode modeFonctionnement;
protected Organisation parent;
public Organisation() {
this.modeFonctionnement = eMode.ND;
this.parent = null;
}
public Organisation(Organisation parent) {
this.modeFonctionnement = eMode.ND;
this.parent = parent;
}
public void setModeFonctionnement(eMode modeFonctionnement) {
this.modeFonctionnement = modeFonctionnement;
this.update();
}
@Override
public void update() {
for (ObservateurAbstrait o : liste) {
o.update(modeFonctionnement);
}
}
}

View File

@ -3,18 +3,24 @@ package Person;
import Comportements.ComportementCombat; import Comportements.ComportementCombat;
import Comportements.ComportementEmmetreSon; import Comportements.ComportementEmmetreSon;
public abstract class Personnage { public class Personnage implements ObservateurAbstrait {
protected String nom; protected String nom;
protected ComportementCombat comportementCombat; protected ComportementCombat comportementCombat;
protected ComportementEmmetreSon comportementEmmetreSon; protected ComportementEmmetreSon comportementEmmetreSon;
protected eMode etatFonctionnement = eMode.ND;
protected Personnage(String nom) { protected Personnage(Organisation etatMajor, String nom) {
this.nom = nom; this.nom = nom;
this.comportementCombat = null; this.comportementCombat = null;
this.comportementEmmetreSon = null; this.comportementEmmetreSon = null;
if (etatMajor != null)
etatMajor.attach(this);
} }
public abstract String getNom(); public String getNom() {
return nom;
}
public void setComportementCombat(ComportementCombat comportementCombat) { public void setComportementCombat(ComportementCombat comportementCombat) {
this.comportementCombat = comportementCombat; this.comportementCombat = comportementCombat;
@ -29,9 +35,30 @@ public abstract class Personnage {
public String Combattre() { public String Combattre() {
if (this.comportementCombat != null) if (this.comportementCombat != null)
return this.comportementCombat.combattre(); return this.comportementCombat.combattre() + " \n" + this.getEtat();
else { else {
return "Ohhh, je suis trop faible pour combattre !"; return "Ohhh, je suis trop faible pour combattre !";
} }
} }
public void update(eMode comportement) {
this.etatFonctionnement = comportement;
}
public String getEtat() {
String etat;
switch (etatFonctionnement) {
case GUERRE:
etat = "En Guerre !";
break;
case PAIX:
etat = "En paix !";
break;
default:
etat = "De quoi ?";
break;
}
return etat;
}
} }

View File

@ -5,7 +5,7 @@ import Comportements.ComportementParlerCommeUnePrincesse;
public class Princesse extends Personnage { public class Princesse extends Personnage {
public Princesse(String nom) { public Princesse(String nom) {
super(nom); super(null, nom);
this.comportementEmmetreSon = new ComportementParlerCommeUnePrincesse(); this.comportementEmmetreSon = new ComportementParlerCommeUnePrincesse();
} }
@ -13,5 +13,4 @@ public class Princesse extends Personnage {
public String getNom() { public String getNom() {
return "Je suis " + this.nom + " princesse des princesses"; return "Je suis " + this.nom + " princesse des princesses";
} }
} }

View File

@ -0,0 +1,23 @@
package Person;
import java.util.ArrayList;
public abstract class SujetObserveAbstrait {
ArrayList<ObservateurAbstrait> liste;
protected SujetObserveAbstrait() {
liste = new ArrayList<ObservateurAbstrait>();
}
public void attach(ObservateurAbstrait observateurAbstrait) {
liste.add(observateurAbstrait);
}
public void remove(ObservateurAbstrait observateurAbstrait) {
liste.remove(observateurAbstrait);
}
public abstract void update();
}

3
src/Person/eMode.java Normal file
View File

@ -0,0 +1,3 @@
package Person;
public enum eMode {ND, PAIX, GUERRE}

View File

@ -1,14 +1,12 @@
import Comportements.ComportementCombat; import Comportements.ComportementCombat;
import Comportements.ComportementEmmetreSon; import Comportements.ComportementEmmetreSon;
import Person.Chevalier; import Person.*;
import Person.Fantasssin;
import Person.Personnage;
import Person.Princesse;
import java.util.ArrayList; import java.util.ArrayList;
public class SimulationJeu { public class SimulationJeu {
ArrayList<Personnage> liste; ArrayList<Personnage> liste;
Organisation o;
public SimulationJeu() { public SimulationJeu() {
liste = new ArrayList<Personnage>(); liste = new ArrayList<Personnage>();
@ -32,9 +30,10 @@ public class SimulationJeu {
} }
public void creationPersonnages() { public void creationPersonnages() {
this.o = new Organisation();
Princesse p = new Princesse("Fiona"); Princesse p = new Princesse("Fiona");
Chevalier z = new Chevalier("Zodiac"); Chevalier z = new Chevalier(o, "Zodiac");
Fantasssin f = new Fantasssin("Fantastic"); Fantasssin f = new Fantasssin(o, "Fantastic");
liste.add(p); liste.add(p);
liste.add(z); liste.add(z);
@ -58,4 +57,8 @@ public class SimulationJeu {
} }
return result.toString(); return result.toString();
} }
public void changerEtat(eMode etat) {
this.o.setModeFonctionnement(etat);
}
} }