summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNicolas Schodet2009-03-03 00:55:36 +0100
committerNicolas Schodet2009-03-03 00:55:36 +0100
commita74aced592651ac6db61e2c46cae6bdcc843b32f (patch)
tree7ee6c2b05bd2b14d06bc8013e9623eea6ec791d3
parent65882a7e5477da7cd0b5e89fb03047f70c7c5ede (diff)
* host/utils:
- added observable.
-rw-r--r--host/utils/observable.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/host/utils/observable.py b/host/utils/observable.py
new file mode 100644
index 00000000..0fb2ba33
--- /dev/null
+++ b/host/utils/observable.py
@@ -0,0 +1,42 @@
+# host/utils - Host utilities. {{{
+#
+# Copyright (C) 2009 Alexandre Stanislawski
+#
+# APBTeam:
+# Web: http://apbteam.org/
+# Email: team AT apbteam DOT org
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# }}} */
+"""Observable/Observer pattern."""
+
+class Observable:
+ """Derive from this object to be observable. An observable object will
+ notify each of its observers every time it changes state."""
+
+ def __init__ (self):
+ self.__observers = [ ]
+
+ def register (self, observer):
+ """Register an observer to this observable."""
+ assert callable (observer)
+ self.__observers.append (observer)
+
+ def notify (self):
+ """Notify all observers. This should be called after every state
+ change."""
+ for observer in self.__observers:
+ observer ()