July 2002
Intermediate to advanced
608 pages
15h 46m
English
Credit: Jimmy Retzlaff
You need to loosen the coupling between two subsystems, since each is often changed independently. Typically, the two subsystems are the GUI and business-logic subsystems of an application.
Tightly coupling application-logic and presentation subsystems is a
bad idea. Publish/subscribe is a good pattern to use for loosening
the degree of coupling between such subsystems. The following
broadcaster module
(broadcaster.py) essentially implements a
multiplexed function call in which the caller does not need to know
the interface of the called functions:
# broadcaster.py _ _all_ _ = ['Register', 'Broadcast', 'CurrentSource', 'CurrentTitle', 'CurrentData'] listeners = {} currentSources = [] currentTitles = [] currentData = [] def Register(listener, arguments=( ), source=None, title=None): if not listeners.has_key((source, title)): listeners[(source, title)] = [] listeners[(source, title)].append((listener, arguments)) def Broadcast(source, title, data={}): currentSources.append(source) currentTitles.append(title) currentData.append(data) listenerList = listeners.get((source, title), [])[:] if source != None: listenerList += listeners.get((None, title), []) if title != None: listenerList += listeners.get((source, None), []) for listener, arguments in listenerList: apply(listener, arguments) currentSources.pop( ) currentTitles.pop( ) currentData.pop( ) def ...