From c9b6b9a5ca082fe7c1b6f58d7713f785a9eb6a5c Mon Sep 17 00:00:00 2001 From: Martial Simon Date: Mon, 15 Sep 2025 01:08:27 +0200 Subject: add: graphs et rushs --- .../fr/epita/assistants/observer/Lifeguard.java | 21 +++++++++ .../fr/epita/assistants/observer/Observable.java | 55 ++++++++++++++++++++++ .../java/fr/epita/assistants/observer/Person.java | 15 ++++++ .../java/fr/epita/assistants/observer/Swimmer.java | 55 ++++++++++++++++++++++ .../epita/assistants/observer/SwimmerStatus.java | 11 +++++ 5 files changed, 157 insertions(+) create mode 100644 graphs/java/observer/src/main/java/fr/epita/assistants/observer/Lifeguard.java create mode 100644 graphs/java/observer/src/main/java/fr/epita/assistants/observer/Observable.java create mode 100644 graphs/java/observer/src/main/java/fr/epita/assistants/observer/Person.java create mode 100644 graphs/java/observer/src/main/java/fr/epita/assistants/observer/Swimmer.java create mode 100644 graphs/java/observer/src/main/java/fr/epita/assistants/observer/SwimmerStatus.java (limited to 'graphs/java/observer/src') diff --git a/graphs/java/observer/src/main/java/fr/epita/assistants/observer/Lifeguard.java b/graphs/java/observer/src/main/java/fr/epita/assistants/observer/Lifeguard.java new file mode 100644 index 0000000..87c5538 --- /dev/null +++ b/graphs/java/observer/src/main/java/fr/epita/assistants/observer/Lifeguard.java @@ -0,0 +1,21 @@ +package fr.epita.assistants.observer; + +import java.util.Set; + +public class Lifeguard implements Observable.Observer { + String name; + + public Lifeguard(String name) { + this.name = name; + System.out.println(name + " begins to keep an eye on the swimmers."); + } + + @Override + public void onEvent(Swimmer event) { + if (event.getStatus() == SwimmerStatus.TOO_FAR) + System.out.println(name + ": " + event.getName() + "! You are too far, come back!"); + else if (event.getStatus() == SwimmerStatus.DROWNING) { + System.out.println(name + ": I will save you " + event.getName() + "!"); + } + } +} diff --git a/graphs/java/observer/src/main/java/fr/epita/assistants/observer/Observable.java b/graphs/java/observer/src/main/java/fr/epita/assistants/observer/Observable.java new file mode 100644 index 0000000..1739739 --- /dev/null +++ b/graphs/java/observer/src/main/java/fr/epita/assistants/observer/Observable.java @@ -0,0 +1,55 @@ +package fr.epita.assistants.observer; + +import java.util.Set; + +/** + * Observer interface. + * + * @param Type of observed events + */ +public interface Observable { + + /** + * Get all registered observers. + * + * @return The set of observers + */ + Set> getObservers(); + + /** + * Register observers. + * + * @param observers Observers to register + */ + void register(final Observer... observers); + + /** + * Unregister the given observer. + * + * @param observer The observer to deactivate + */ + void unregister(final Observer observer); + + /** + * Notify all registered observers of the given event. + * + * @param event The event to notify observers with. + */ + void fire(final EVENT_T event); + + /** + * Sub interface for observers. + * + * @param The type of observed events + */ + @FunctionalInterface + interface Observer { + + /** + * Notification callback. + * + * @param event The event being sent + */ + void onEvent(final EVENT_T event); + } +} diff --git a/graphs/java/observer/src/main/java/fr/epita/assistants/observer/Person.java b/graphs/java/observer/src/main/java/fr/epita/assistants/observer/Person.java new file mode 100644 index 0000000..81247ac --- /dev/null +++ b/graphs/java/observer/src/main/java/fr/epita/assistants/observer/Person.java @@ -0,0 +1,15 @@ +package fr.epita.assistants.observer; + +public class Person implements Observable.Observer { + String name; + + public Person(String name) { + this.name = name; + } + + @Override + public void onEvent(Swimmer event) { + if (event.getStatus() == SwimmerStatus.WAVING) + System.out.println(name + ": Waves back at " + event.getName() + "."); + } +} diff --git a/graphs/java/observer/src/main/java/fr/epita/assistants/observer/Swimmer.java b/graphs/java/observer/src/main/java/fr/epita/assistants/observer/Swimmer.java new file mode 100644 index 0000000..2ce803a --- /dev/null +++ b/graphs/java/observer/src/main/java/fr/epita/assistants/observer/Swimmer.java @@ -0,0 +1,55 @@ +package fr.epita.assistants.observer; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +public class Swimmer implements Observable { + Set> observers = new HashSet<>(); + String name; + SwimmerStatus status = SwimmerStatus.OK; + + public Swimmer(String name) { + this.name = name; + System.out.println(this.name + " goes into the sea."); + } + + public String getName() { + return name; + } + + public SwimmerStatus getStatus() { + return status; + } + + @Override + public Set> getObservers() { + return observers; + } + + public void setStatus(SwimmerStatus status) { + this.status = status; + if (status == SwimmerStatus.DROWNING) { + System.out.println(name + ": I'm drowning, help!!"); + } + else if (status == SwimmerStatus.WAVING) + System.out.println(name + ": Waves towards the shore."); + fire(this); + } + + @Override + public void register(Observer... observers) { + this.observers.addAll(Arrays.asList(observers)); + } + + @Override + public void unregister(Observer observer) { + this.observers.remove(observer); + } + + @Override + public void fire(Swimmer event) { + for (Observer o : this.observers) + o.onEvent(event); + } +} diff --git a/graphs/java/observer/src/main/java/fr/epita/assistants/observer/SwimmerStatus.java b/graphs/java/observer/src/main/java/fr/epita/assistants/observer/SwimmerStatus.java new file mode 100644 index 0000000..71856c6 --- /dev/null +++ b/graphs/java/observer/src/main/java/fr/epita/assistants/observer/SwimmerStatus.java @@ -0,0 +1,11 @@ +package fr.epita.assistants.observer; + +/** + * Status of a swimmer. + */ +public enum SwimmerStatus { + OK, + DROWNING, + TOO_FAR, + WAVING +} -- cgit v1.2.3