From eb4e192cad0dec90754a1502bedb9d809befec37 Mon Sep 17 00:00:00 2001 From: aminecmi Date: Fri, 3 Oct 2014 17:20:49 +0200 Subject: [PATCH] Observer Pattern --- src/Main.java | 7 ++---- src/Person/Chevalier.java | 6 ++--- src/Person/Fantasssin.java | 4 ++-- src/Person/ObservateurAbstrait.java | 5 ++++ src/Person/Organisation.java | 29 +++++++++++++++++++++++ src/Person/Personnage.java | 35 ++++++++++++++++++++++++---- src/Person/Princesse.java | 3 +-- src/Person/SujetObserveAbstrait.java | 23 ++++++++++++++++++ src/Person/eMode.java | 3 +++ src/SimulationJeu.java | 15 +++++++----- 10 files changed, 108 insertions(+), 22 deletions(-) create mode 100644 src/Person/ObservateurAbstrait.java create mode 100644 src/Person/Organisation.java create mode 100644 src/Person/SujetObserveAbstrait.java create mode 100644 src/Person/eMode.java diff --git a/src/Main.java b/src/Main.java index 4a65d79..fb36a5f 100644 --- a/src/Main.java +++ b/src/Main.java @@ -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()); } } diff --git a/src/Person/Chevalier.java b/src/Person/Chevalier.java index acb08f3..46e5ee3 100644 --- a/src/Person/Chevalier.java +++ b/src/Person/Chevalier.java @@ -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(); } diff --git a/src/Person/Fantasssin.java b/src/Person/Fantasssin.java index dbe73bf..3dceebb 100644 --- a/src/Person/Fantasssin.java +++ b/src/Person/Fantasssin.java @@ -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(); } diff --git a/src/Person/ObservateurAbstrait.java b/src/Person/ObservateurAbstrait.java new file mode 100644 index 0000000..2d4d2d5 --- /dev/null +++ b/src/Person/ObservateurAbstrait.java @@ -0,0 +1,5 @@ +package Person; + +public interface ObservateurAbstrait { + public void update(eMode comportement); +} diff --git a/src/Person/Organisation.java b/src/Person/Organisation.java new file mode 100644 index 0000000..0e80cbe --- /dev/null +++ b/src/Person/Organisation.java @@ -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); + } + } +} diff --git a/src/Person/Personnage.java b/src/Person/Personnage.java index 50f67e4..8b6ae10 100644 --- a/src/Person/Personnage.java +++ b/src/Person/Personnage.java @@ -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; + } } diff --git a/src/Person/Princesse.java b/src/Person/Princesse.java index f01c8c7..33f1772 100644 --- a/src/Person/Princesse.java +++ b/src/Person/Princesse.java @@ -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"; } - } diff --git a/src/Person/SujetObserveAbstrait.java b/src/Person/SujetObserveAbstrait.java new file mode 100644 index 0000000..37ebe5b --- /dev/null +++ b/src/Person/SujetObserveAbstrait.java @@ -0,0 +1,23 @@ +package Person; + +import java.util.ArrayList; + +public abstract class SujetObserveAbstrait { + + ArrayList liste; + + protected SujetObserveAbstrait() { + liste = new ArrayList(); + } + + public void attach(ObservateurAbstrait observateurAbstrait) { + liste.add(observateurAbstrait); + } + + + public void remove(ObservateurAbstrait observateurAbstrait) { + liste.remove(observateurAbstrait); + } + + public abstract void update(); +} diff --git a/src/Person/eMode.java b/src/Person/eMode.java new file mode 100644 index 0000000..7a90511 --- /dev/null +++ b/src/Person/eMode.java @@ -0,0 +1,3 @@ +package Person; + +public enum eMode {ND, PAIX, GUERRE} diff --git a/src/SimulationJeu.java b/src/SimulationJeu.java index cdc8e14..20306b6 100644 --- a/src/SimulationJeu.java +++ b/src/SimulationJeu.java @@ -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 liste; + Organisation o; public SimulationJeu() { liste = new ArrayList(); @@ -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); + } }