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

View File

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

View File

@ -4,8 +4,8 @@ import Comportements.ComportementAPiedAvecHache;
import Comportements.ComportementCrier;
public class Fantasssin extends Personnage {
public Fantasssin(String nom) {
super(nom);
public Fantasssin(Organisation etatMajor, String nom) {
super(etatMajor, nom);
this.comportementCombat = new ComportementAPiedAvecHache();
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.ComportementEmmetreSon;
public abstract class Personnage {
public class Personnage implements ObservateurAbstrait {
protected String nom;
protected ComportementCombat comportementCombat;
protected ComportementEmmetreSon comportementEmmetreSon;
protected eMode etatFonctionnement = eMode.ND;
protected Personnage(String nom) {
protected Personnage(Organisation etatMajor, String nom) {
this.nom = nom;
this.comportementCombat = null;
this.comportementEmmetreSon = null;
if (etatMajor != null)
etatMajor.attach(this);
}
public abstract String getNom();
public String getNom() {
return nom;
}
public void setComportementCombat(ComportementCombat comportementCombat) {
this.comportementCombat = comportementCombat;
@ -29,9 +35,30 @@ public abstract class Personnage {
public String Combattre() {
if (this.comportementCombat != null)
return this.comportementCombat.combattre();
return this.comportementCombat.combattre() + " \n" + this.getEtat();
else {
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 Princesse(String nom) {
super(nom);
super(null, nom);
this.comportementEmmetreSon = new ComportementParlerCommeUnePrincesse();
}
@ -13,5 +13,4 @@ public class Princesse extends Personnage {
public String getNom() {
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.ComportementEmmetreSon;
import Person.Chevalier;
import Person.Fantasssin;
import Person.Personnage;
import Person.Princesse;
import Person.*;
import java.util.ArrayList;
public class SimulationJeu {
ArrayList<Personnage> liste;
Organisation o;
public SimulationJeu() {
liste = new ArrayList<Personnage>();
@ -32,9 +30,10 @@ public class SimulationJeu {
}
public void creationPersonnages() {
this.o = new Organisation();
Princesse p = new Princesse("Fiona");
Chevalier z = new Chevalier("Zodiac");
Fantasssin f = new Fantasssin("Fantastic");
Chevalier z = new Chevalier(o, "Zodiac");
Fantasssin f = new Fantasssin(o, "Fantastic");
liste.add(p);
liste.add(z);
@ -58,4 +57,8 @@ public class SimulationJeu {
}
return result.toString();
}
public void changerEtat(eMode etat) {
this.o.setModeFonctionnement(etat);
}
}