oggetto gettone: ManagerPosizione,
che contiene l'oggetto LinkPosizione
public class ManagerPosizione {
LinkPosizione link;
private ManagerPosizione(LinkPosizione link) {
this.link = link;
}
public LinkPosizione getLink() {
return this.link;
}
public static void addPosizione(LinkPosizione link) {
ManagerPosizione manager = new ManagerPosizione(link);
link.getAutobus().setPerManagerPosizione(manager);
link.getAutorimessa().addPerManagerPosizione(manager);
}
public static void removePosizione(LinkPosizione link) {
ManagerPosizione manager;
manager = new ManagerPosizione(null);
link.getAutobus().setPerManagerPosizione(manager);
manager = new ManagerPosizione(link);
link.getAutorimessa().removePerManagerPosizione(manager);
}
}
classe dati: ha i metodi addPerManagerPosizione() etc.
public class Autobus implements Listener {
…
private LinkPosizione posizione;
public LinkPosizione getPosizione() {
return this.posizione;
}
public void setPosizione(LinkPosizione posizione) {
ManagerPosizione.addPosizione(posizione);
}
public void setPerManagerPosizione(ManagerPosizione manager) {
if (manager == null)
throw new RuntimeException("manager posizione vuoto");
this.posizione = manager.getLink();
}
…
public interface Task {
public void esegui();
}
public final class TaskExecutor {
public static TaskExecutor getInstance() {
…
}
public synchronized void perform(Task t) {
…
}
}
public class Autobus implements Listener {
…
public void fired(Evento e) {
TaskExecutor.getInstance().perform(new AutobusFired(this, e));
}
…
}
public class AutobusFired implements Task {
…
@Override
public void esegui() {
…
}
…
}
public class VerificaPeriodica implements Runnable {
…
Periodica p = new Periodica(autobus);
TaskExecutor.getInstance().perform(p);
…
}
public class Periodica implements Task {
…
@Override
public void esegui() {
…
}
…
}
public class AutobusFired implements Task {
…
Environment.aggiungiEvento(new Entrata(this.autobus, this.autobus.precedente, rimessa));
…
}