The before code shows a state holder that changes state without notifying anyone. The after code implements the observer pattern where observers register to the subject and get notified automatically when the state changes.
### Before: No notification on state change
class StateHolder:
def __init__(self):
self._state = None
def set_state(self, value):
self._state = value
class Observer:
def update(self, value):
print(f"Observer received new state: {value}")
state_holder = StateHolder()
observer = Observer()
state_holder.set_state(10) # Observer is not notified
### After: Observer pattern implemented
class Subject:
def __init__(self):
self._state = None
self._observers = []
def register(self, observer):
self._observers.append(observer)
def unregister(self, observer):
self._observers.remove(observer)
def notify(self):
for observer in self._observers:
observer.update(self._state)
def set_state(self, value):
self._state = value
self.notify()
class Observer:
def update(self, value):
print(f"Observer received new state: {value}")
subject = Subject()
observer = Observer()
subject.register(observer)
subject.set_state(10) # Observer is notified and prints the new state