diff options
author | zeldakatze <coffee@zeldakatze.de> | 2025-07-01 15:06:59 +0200 |
---|---|---|
committer | zeldakatze <coffee@zeldakatze.de> | 2025-07-01 15:06:59 +0200 |
commit | 194e685746df778b8ccc72ac24d30e157d6fba04 (patch) | |
tree | 0361f866c88bb0bc473efd7f81d00b1950f15685 | |
parent | 93decd83a975100da2846c081efe3da8c24119f6 (diff) | |
download | se25-assignment08-194e685746df778b8ccc72ac24d30e157d6fba04.tar.gz se25-assignment08-194e685746df778b8ccc72ac24d30e157d6fba04.zip |
-rw-r--r-- | de/unibayreuth/se/observer/ConcreteObserver.java | 21 | ||||
-rw-r--r-- | de/unibayreuth/se/observer/ConcreteSubject.java | 21 | ||||
-rw-r--r-- | de/unibayreuth/se/observer/Main.java | 17 | ||||
-rw-r--r-- | de/unibayreuth/se/observer/Subject.java | 30 |
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); + } } |