summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeldakatze <coffee@zeldakatze.de>2025-07-01 15:06:59 +0200
committerzeldakatze <coffee@zeldakatze.de>2025-07-01 15:06:59 +0200
commit194e685746df778b8ccc72ac24d30e157d6fba04 (patch)
tree0361f866c88bb0bc473efd7f81d00b1950f15685
parent93decd83a975100da2846c081efe3da8c24119f6 (diff)
downloadse25-assignment08-194e685746df778b8ccc72ac24d30e157d6fba04.tar.gz
se25-assignment08-194e685746df778b8ccc72ac24d30e157d6fba04.zip
ImplementHEADmain
-rw-r--r--de/unibayreuth/se/observer/ConcreteObserver.java21
-rw-r--r--de/unibayreuth/se/observer/ConcreteSubject.java21
-rw-r--r--de/unibayreuth/se/observer/Main.java17
-rw-r--r--de/unibayreuth/se/observer/Subject.java30
4 files changed, 61 insertions, 28 deletions
diff --git a/de/unibayreuth/se/observer/ConcreteObserver.java b/de/unibayreuth/se/observer/ConcreteObserver.java
index 5797976..4c8e443 100644
--- a/de/unibayreuth/se/observer/ConcreteObserver.java
+++ b/de/unibayreuth/se/observer/ConcreteObserver.java
@@ -1,17 +1,30 @@
package de.unibayreuth.se.observer;
public class ConcreteObserver implements Observer {
+ private static int NEXT_ID = 1;
+
+ private int id = NEXT_ID++;
- public ConcreteObserver(Subject subject) {
- // TODO
+ private ConcreteSubject subject;
+
+ public ConcreteObserver(ConcreteSubject subject) {
+ this.subject = subject;
+ subject.attach(this);
}
@Override
public void update(Subject subject) {
- // TODO
+ ConcreteSubject s = (ConcreteSubject) subject;
+ System.out.println("Observer " + id + " received update from subject "
+ + "ConcreteSubject " + s.getValue());
+
}
public void detach() {
- // TODO
+ subject.detach(this);
}
+
+ public int getID() {
+ return id;
+ }
}
diff --git a/de/unibayreuth/se/observer/ConcreteSubject.java b/de/unibayreuth/se/observer/ConcreteSubject.java
index 62ab7bb..29862ce 100644
--- a/de/unibayreuth/se/observer/ConcreteSubject.java
+++ b/de/unibayreuth/se/observer/ConcreteSubject.java
@@ -1,5 +1,22 @@
package de.unibayreuth.se.observer;
-public class ConcreteSubject {
- // TODO
+public class ConcreteSubject extends Subject {
+ private static int NEXT_ID = 1;
+
+ private int id = NEXT_ID++;
+
+ private int value;
+
+ public ConcreteSubject() {
+ super();
+ }
+
+ public void setValue(int i) {
+ value = i;
+ fireUpdate();
+ }
+
+ public int getValue() {
+ return value;
+ }
}
diff --git a/de/unibayreuth/se/observer/Main.java b/de/unibayreuth/se/observer/Main.java
index fdf60b3..8b87109 100644
--- a/de/unibayreuth/se/observer/Main.java
+++ b/de/unibayreuth/se/observer/Main.java
@@ -2,15 +2,14 @@ package de.unibayreuth.se.observer;
public class Main {
public static void main(String[] args) {
- // TODO: Uncomment after resolving all TODOs. No changes are required in the main method.
- //ConcreteSubject subject = new ConcreteSubject();
- //ConcreteObserver observer1 = new ConcreteObserver(subject);
- //ConcreteObserver observer2 = new ConcreteObserver(subject);
+ ConcreteSubject subject = new ConcreteSubject();
+ ConcreteObserver observer1 = new ConcreteObserver(subject);
+ ConcreteObserver observer2 = new ConcreteObserver(subject);
- //subject.setValue(5);
- //observer1.detach();
- //subject.setValue(1);
- //observer2.detach();
- //subject.setValue(3);
+ subject.setValue(5);
+ observer1.detach();
+ subject.setValue(1);
+ observer2.detach();
+ subject.setValue(3);
}
}
diff --git a/de/unibayreuth/se/observer/Subject.java b/de/unibayreuth/se/observer/Subject.java
index 2f0b5bb..659513e 100644
--- a/de/unibayreuth/se/observer/Subject.java
+++ b/de/unibayreuth/se/observer/Subject.java
@@ -1,21 +1,25 @@
package de.unibayreuth.se.observer;
+import java.util.*;
+
public abstract class Subject {
- // TODO
+ private List<Observer> observers;
- public Subject() {
- // TODO
- }
+ public Subject() {
+ observers = new ArrayList<Observer>();
+ }
- void attach(Observer observer) {
- // TODO
- }
+ void attach(Observer observer) {
+ observers.add(observer);
+ }
- void detach(Observer observer) {
- // TODO
- }
+ void detach(Observer observer) {
+ observers.remove(observer);
+ }
- protected void fireUpdate() {
- // TODO
- }
+ protected void fireUpdate() {
+ System.out.println("Sending update to observers ...");
+ for(Observer o : observers)
+ o.update(this);
+ }
}