Test passed

This commit is contained in:
tuanvu
2025-11-07 11:20:49 +01:00
parent a8aadeec55
commit 588df021b6
4 changed files with 42 additions and 14 deletions

View File

@@ -2,13 +2,31 @@ package impl;
import interfaces.Capteur; import interfaces.Capteur;
import interfaces.ObserverdeCapteur; import interfaces.ObserverdeCapteur;
import java.util.concurrent.Future;
public class Afficheur implements ObserverdeCapteur { public class Afficheur implements ObserverdeCapteur {
private Canal canalAsync;
public Afficheur() {}
public Afficheur(Canal canalAsync) {
this.canalAsync = canalAsync;
}
public void setCanal(Canal canal){
this.canalAsync = canal;
}
//AO1 - concrete servant //AO1 - concrete servant
//TODO changer capteur à canal
@Override @Override
public void update(Capteur subject) { public void update(Capteur subject) {
subject.getValue(); try{
Future<Integer> futureValue= canalAsync.getValue();
Integer value=futureValue.get();
System.out.println(value);
}catch(Exception e){
//TODO
e.printStackTrace();
}
} }
} }

View File

@@ -11,7 +11,7 @@ public class Canal implements ObserverDeCapteurAsync, CapteurAsync {
private int delay=1000; private int delay=1000;
private Scheduler scheduler; private Scheduler scheduler;
private ObserverdeCapteur afficher; private ObserverdeCapteur afficher;
private Capteur capteur ; private Capteur capteur;
public Canal(Capteur capteur, Scheduler scheduler, ObserverdeCapteur afficher) { public Canal(Capteur capteur, Scheduler scheduler, ObserverdeCapteur afficher) {
this.capteur = capteur; this.capteur = capteur;

View File

@@ -3,12 +3,14 @@ package impl;
import interfaces.AlgoDiffusion; import interfaces.AlgoDiffusion;
import interfaces.Capteur; import interfaces.Capteur;
import interfaces.ObserverDeCapteurAsync; import interfaces.ObserverDeCapteurAsync;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class CapteurImpl implements Capteur { public class CapteurImpl implements Capteur {
public int value; public int value;
public AlgoDiffusion diffusion; public AlgoDiffusion diffusion;
public List<ObserverDeCapteurAsync> observers; public List<ObserverDeCapteurAsync> observers=new ArrayList<ObserverDeCapteurAsync>();
/* /*
public CapteurImpl(AlgoDiffusion diffusion) { public CapteurImpl(AlgoDiffusion diffusion) {
@@ -40,15 +42,14 @@ public class CapteurImpl implements Capteur {
@Override @Override
public void tick() { public void tick() {
value++; value++;
for (ObserverDeCapteurAsync obs : observers) { for (ObserverDeCapteurAsync canal : observers) {
obs.update(this); canal.update(this);
} }
} }
//AO2 - Concrete Servant //AO2 - Concrete Servant
@Override @Override
public int getValue() { public int getValue() {
return 0; return this.value;
} }
} }

View File

@@ -1,4 +1,7 @@
import java.util.Timer; import java.util.Timer;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import impl.Afficheur; import impl.Afficheur;
import impl.Canal; import impl.Canal;
@@ -15,13 +18,19 @@ public class main {
Scheduler scheduler = new Scheduler(NB_CANAUX); Scheduler scheduler = new Scheduler(NB_CANAUX);
Capteur c = new CapteurImpl(); Capteur c = new CapteurImpl();
Afficheur a=new Afficheur();
Canal canal=new Canal(c,scheduler,a);
a.setCanal(canal);
c.attach(canal);
/*
for(int i = 0; i<NB_CANAUX; i++){ for(int i = 0; i<NB_CANAUX; i++){
ObserverdeCapteur afficheur = new Afficheur(); ObserverdeCapteur afficheur = new Afficheur();
new Canal(c, scheduler, afficheur); new Canal(c, scheduler, afficheur);
} }
*/
ScheduledExecutorService clock = Executors.newScheduledThreadPool(1);
clock.scheduleAtFixedRate(() -> c.tick(), 0, 500, TimeUnit.MILLISECONDS);
} }
} }