В программировании термины «Наблюдатель» и «Наблюдаемый» обычно используются для реализации шаблона проектирования «Наблюдатель». Этот шаблон позволяет объектам взаимодействовать друг с другом слабосвязанным образом, при котором изменения в одном объекте автоматически распространяются на другие зависимые объекты. В этой статье блога мы рассмотрим разницу между Observer и Observable и приведем примеры кода их использования.
Понимание шаблона наблюдателя.
Шаблон наблюдателя — это шаблон поведенческого проектирования, который определяет зависимость «один ко многим» между объектами. Он состоит из двух основных компонентов: Observer и Observable.
Наблюдатель:
Наблюдатель — это объект, который заинтересован в получении обновлений или уведомлений при возникновении изменений в другом объекте, известном как Observable. Observer определяет интерфейс или метод обратного вызова, который вызывается Observable при возникновении изменений. Затем он может соответствующим образом отреагировать на изменение.
Наблюдаемый:
Наблюдаемый, также известный как Субъект, — это объект, за которым наблюдают один или несколько наблюдателей. Он поддерживает список наблюдателей и уведомляет их всякий раз, когда в его состоянии происходит изменение. Observable предоставляет методы для регистрации и отмены регистрации наблюдателей, а также для уведомления их об изменениях.
Примеры кода.
Давайте рассмотрим несколько примеров кода на разных языках программирования, чтобы проиллюстрировать использование Observer и Observable.
-
Java:
import java.util.Observable; import java.util.Observer; class MyObservable extends Observable { private int data; public int getData() { return data; } public void setData(int data) { this.data = data; setChanged(); notifyObservers(); } } class MyObserver implements Observer { @Override public void update(Observable o, Object arg) { MyObservable observable = (MyObservable) o; System.out.println("Data changed: " + observable.getData()); } } public class ObserverPatternExample { public static void main(String[] args) { MyObservable observable = new MyObservable(); MyObserver observer = new MyObserver(); observable.addObserver(observer); observable.setData(10); // Output: Data changed: 10 } } -
Python:
class Observable: def __init__(self): self.observers = [] self.data = None def register_observer(self, observer): self.observers.append(observer) def unregister_observer(self, observer): self.observers.remove(observer) def notify_observers(self): for observer in self.observers: observer.update(self) def set_data(self, data): self.data = data self.notify_observers()
class Observer:
def update(self, observable):
print(“Данные изменены:”, observable.data)
def main():
observable = Observable()
observer = Observer()
observable.register_observer(observer)
observable.set_data(10) # Вывод: Данные изменены: 10п>
if name == “main “:
main()