public class Noeud { private String nom ; private int valeur ; private int capacite ; /** * initialise le Noeud courant avec unNom, uneValeur et unCoefficient * @param uneValeur * @param unCoefficient */ public Noeud(String unNom, int uneValeur, int uneCapacite) { this.setNom(unNom); this.setValeur(uneValeur); this.setCapacite(uneCapacite); } /** recupere le nom du Noeud * */ public String getNom() { return this.nom ; } /** * unNom devient le nom du Noeud */ public void setNom(String unNom) { this.nom = unNom ; } /** recupere la valeur du Noeud * */ public int getValeur() { return this.valeur ; } /** * */ public void setValeur(int uneValeur) { this.valeur = uneValeur ; } /** * */ public int getCapacite() { return this.capacite ; } /** * */ public void setCapacite(int unCoefficient) { this.capacite = unCoefficient ; } /** * retourne le String decrivant le Noeud */ public String toString() { return "(" + this.getNom() + ", " + this.getValeur() + ", " + this.getCapacite() + ")" ; } /** * met a jour la valeur du Noeud courant en fonction de v * @param v */ public void majValeur(int v) { this.setValeur(this.getValeur() + v * this.getCapacite()) ; } } // fin classe Noeud /** * @author dominique * gere un sujet dans le cadre du design pattern Observateur */ public interface Sujet { public abstract void enregistrerObservateur(Observateur o) ; public abstract void supprimerObservateur(Observateur o) ; public abstract void notifierObservateurs() ; } // fin interface Sujet import java.util.ArrayList ; /** * @author dominique * */ public class NoeudSujet extends Noeud implements Sujet { private ArrayList observateurs ; /** * initialise le NoeudSujet avec uneValeur et unCoefficient * et pas d'observateur */ public NoeudSujet(String unNom, int uneValeur, int unCoefficient) { super(unNom, uneValeur, unCoefficient) ; this.observateurs = new ArrayList() ; } public void enregistrerObservateur(Observateur o) { this.observateurs.add(o) ; } public void supprimerObservateur(Observateur o) { this.observateurs.remove(o) ; } public void notifierObservateurs() { for(int i = 0 ; i < this.observateurs.size(); i++) { this.observateurs.get(i).actualiser(this.getValeur()); } } /** * on utilise uneValeur pour modifier la valeur du NoeudSujet */ public void changementValeur(int uneValeur) { this.majValeur(uneValeur) ; this.notifierObservateurs() ; } } // fin classe NoeudSujet /** * */ /** * @author dominique * gere un Observateur dans le cadre de design pattern Observateur */ public interface Observateur { /** actualise la valeur de l'Observateur * * @param valeur */ public abstract void actualiser(int uneValeur) ; } // fin interface Observateur /** * @author Dominique Bouthinon * */ public class NoeudObservateur extends Noeud implements Observateur { /** * initialise le NoeudObservateur avec unNom, uneValeur et unCoefficient * et l'initialise avec uneValeur et unCoefficient */ public NoeudObservateur(Sujet s, String unNom, int uneValeur, int unCoefficient) { super(unNom, uneValeur, unCoefficient) ; s.enregistrerObservateur(this) ; } /** * met a jour le NoeudObservateur avec uneValeur * et affiche le noeud a jour */ public void actualiser(int uneValeur) { this.majValeur(uneValeur); } } // fin classe NoeudObservateur import java.util.ArrayList ; /** * @author dominique * teste les Noeuds pour faire un Graph (avec le design Pattern Observateur) * */ public class TestObservateur { public static void main(String[] args) { // question 1) NoeudSujet n0 = new NoeudSujet("n0", 0, 2) ; Observateur n1 = new NoeudObservateur(n0, "n1", 0, 1) ; Observateur n2 = new NoeudObservateur(n0, "n2", 0, 4) ; Observateur n3 = new NoeudObservateur(n0, "n3", 0, 5) ; System.out.println(n0) ; System.out.println(n1) ; System.out.println(n2) ; System.out.println(n3) ; System.out.println() ; n0.changementValeur(1) ; System.out.println() ; System.out.println(n0) ; System.out.println(n1) ; System.out.println(n2) ; System.out.println(n3) ; } } // fin classe TestObservateur