from abc import ABC, abstractmethod
class Observer(ABC):
"""
Interface untuk objek yang 'mengamati' (biasanya View).
"""
@abstractmethod
def update(self, subject, *args, **kwargs):
pass
class Observable:
"""
Kelas dasar untuk objek yang 'diamati' (biasanya Model).
Memiliki daftar pengamat (observers) dan memberi tahu mereka jika ada perubahan.
"""
def __init__(self):
self._observers = []
def add_observer(self, observer: Observer):
if observer not in self._observers:
self._observers.append(observer)
def remove_observer(self, observer: Observer):
if observer in self._observers:
self._observers.remove(observer)
def notify_observers(self, *args, **kwargs):
"""
Memberi tahu semua observer bahwa ada perubahan data.
"""
for observer in self._observers:
observer.update(self, *args, **kwargs)