From ef4093c5ba38caa38a9f9ebabd2ef02c5416a223 Mon Sep 17 00:00:00 2001 From: "Glenn Y. Rolland" Date: Sun, 3 Jan 2021 21:30:58 +0100 Subject: [PATCH] Add observable design pattern implementation --- src/lib/observable.cr | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/lib/observable.cr diff --git a/src/lib/observable.cr b/src/lib/observable.cr new file mode 100644 index 0000000..6c7093e --- /dev/null +++ b/src/lib/observable.cr @@ -0,0 +1,21 @@ + +# Code from: https://github.com/crystal-community/crystal-patterns +# Licence: MIT + +module Observable(T) + getter observers + + def add_observer(observer) + @observers ||= [] of T + @observers.not_nil! << observer + end + + def delete_observer(observer) + @observers.try &.delete(observer) + end + + def notify_observers + @observers.try &.each &.update self + end +end +