This commit is contained in:
trochas
2025-11-07 10:42:02 +01:00
9 changed files with 79 additions and 26 deletions

View File

@@ -4,8 +4,11 @@ import interfaces.Capteur;
import interfaces.ObserverdeCapteur; import interfaces.ObserverdeCapteur;
public class Afficheur implements ObserverdeCapteur { public class Afficheur implements ObserverdeCapteur {
//AO1 - concrete servant //AO1 - concrete servant
//TODO changer capteur à canal
@Override @Override
public void update(Capteur subject) { public void update(Capteur subject) {
subject.getValue();
} }
} }

View File

@@ -3,19 +3,31 @@ package impl;
import interfaces.Capteur; import interfaces.Capteur;
import interfaces.CapteurAsync; import interfaces.CapteurAsync;
import interfaces.ObserverDeCapteurAsync; import interfaces.ObserverDeCapteurAsync;
import interfaces.ObserverdeCapteur;
import java.util.concurrent.Future; import java.util.concurrent.Future;
public class Canal implements ObserverDeCapteurAsync, CapteurAsync { public class Canal implements ObserverDeCapteurAsync, CapteurAsync {
private int delay=1000;
private Scheduler scheduler;
private ObserverdeCapteur afficher;
private Capteur capteur ;
public Canal(Capteur capteur, Scheduler scheduler, ObserverdeCapteur afficher) {
this.capteur = capteur;
this.scheduler = scheduler;
this.afficher = afficher;
}
//AO1 - proxy //AO1 - proxy
@Override @Override
public Future<?> update(Capteur c) { public Future<?> update(Capteur c) {
return null; return scheduler.enquete(new UpdateReq(capteur,afficher),delay);
} }
//AO2 - proxy //AO2 - proxy
@Override @Override
public Future<Integer> getValue() { public Future<Integer> getValue() {
return null; return scheduler.enquete(new GetValueReq(capteur),delay);
} }
} }

View File

@@ -3,22 +3,20 @@ package impl;
import interfaces.AlgoDiffusion; import interfaces.AlgoDiffusion;
import interfaces.Capteur; import interfaces.Capteur;
import interfaces.ObserverDeCapteurAsync; import interfaces.ObserverDeCapteurAsync;
import java.time.Clock;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class CapteurImpl implements Capteur { public class CapteurImpl implements Capteur {
public Clock clock = Clock.systemUTC();
public int value; public int value;
public AlgoDiffusion diffusion; public AlgoDiffusion diffusion;
public List<ObserverDeCapteurAsync> observers; public List<ObserverDeCapteurAsync> observers;
/*
public CapteurImpl(AlgoDiffusion diffusion) { public CapteurImpl(AlgoDiffusion diffusion) {
value = 0; value = 0;
observers = new ArrayList<>(); observers = new ArrayList<>();
this.diffusion = diffusion; this.diffusion = diffusion;
} }
*/
@Override @Override
public void attach(ObserverDeCapteurAsync o) { public void attach(ObserverDeCapteurAsync o) {
try { try {
@@ -41,8 +39,9 @@ public class CapteurImpl implements Capteur {
@Override @Override
public void tick() { public void tick() {
for (ObserverDeCapteurAsync canal : observers) { value++;
canal.update(this); for (ObserverDeCapteurAsync obs : observers) {
obs.update(this);
} }
} }

View File

@@ -1,9 +0,0 @@
package impl;
public class GetValue {
//AO2 - concrete MI
public void call() {
}
}

17
src/impl/GetValueReq.java Normal file
View File

@@ -0,0 +1,17 @@
package impl;
import interfaces.Capteur;
import java.util.concurrent.Callable;
public class GetValueReq implements Callable<Integer> {
private Capteur capteur;
public GetValueReq(Capteur capteur) {
this.capteur = capteur;
}
//AO2 - concrete MI
public Integer call() {
return capteur.getValue();
}
}

16
src/impl/Scheduler.java Normal file
View File

@@ -0,0 +1,16 @@
package impl;
import java.util.concurrent.*;
public class Scheduler {
private final ScheduledExecutorService scheduler;
public Scheduler(int nbCanaux) {
int nThread = 2+2*nbCanaux;
scheduler = Executors.newScheduledThreadPool(nThread);
}
public <T> Future<T> enquete(Callable<T> task, long delay) {
return scheduler.schedule(task, delay, TimeUnit.MICROSECONDS);
}
}

View File

@@ -1,8 +0,0 @@
package impl;
public class Update {
//AO1 - concrete MI
public void call() {
}
}

23
src/impl/UpdateReq.java Normal file
View File

@@ -0,0 +1,23 @@
package impl;
import interfaces.Capteur;
import interfaces.ObserverdeCapteur;
import java.util.concurrent.Callable;
public class UpdateReq implements Callable<Void> {
private Capteur capteur;
private ObserverdeCapteur afficheur;
public UpdateReq(Capteur capteur, ObserverdeCapteur afficheur) {
this.capteur = capteur;
this.afficheur = afficheur;
}
//AO1 - concrete MI
@Override
public Void call() {
afficheur.update(capteur);
return null;
}
}

View File

@@ -5,5 +5,5 @@ public interface Capteur {
public void tick(); public void tick();
//AO2 - servant //AO2 - servant
int getValue(); public int getValue();
} }