From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../hjp5/examples/Listing1019.java | 81 ++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 Master/Reference Architectures and Patterns/hjp5/examples/Listing1019.java (limited to 'Master/Reference Architectures and Patterns/hjp5/examples/Listing1019.java') diff --git a/Master/Reference Architectures and Patterns/hjp5/examples/Listing1019.java b/Master/Reference Architectures and Patterns/hjp5/examples/Listing1019.java new file mode 100644 index 0000000..4784334 --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/examples/Listing1019.java @@ -0,0 +1,81 @@ +/* Listing1019.java */ + +interface Observer +{ + public void update(Subject subject); +} + +class Subject +{ + Observer[] observers = new Observer[5]; + int observerCnt = 0; + + public void attach(Observer observer) + { + observers[observerCnt++] = observer; + } + + public void detach(Observer observer) + { + for (int i = 0; i < observerCnt; ++i) { + if (observers[i] == observer) { + --observerCnt; + for (;i < observerCnt; ++i) { + observers[i] = observers[i + 1]; + } + break; + } + } + } + + public void fireUpdate() + { + for (int i = 0; i < observerCnt; ++i) { + observers[i].update(this); + } + } +} + +class Counter +{ + int cnt = 0; + Subject subject = new Subject(); + + public void attach(Observer observer) + { + subject.attach(observer); + } + + public void detach(Observer observer) + { + subject.detach(observer); + } + + public void inc() + { + if (++cnt % 3 == 0) { + subject.fireUpdate(); + } + } +} + +public class Listing1019 +{ + public static void main(String[] args) + { + Counter counter = new Counter(); + counter.attach( + new Observer() + { + public void update(Subject subject) + { + System.out.print("divisible by 3: "); + } + } + ); + while (counter.cnt < 10) { + counter.inc(); + System.out.println(counter.cnt); + } + } +} \ No newline at end of file -- cgit v1.2.3