관찰자 패턴
관찰자 패턴은 개체가 개체의 상태가 변경될 때 알림을 받는 여러 종속 항목(관찰자라고 할 수 있음)을 가질 수 있는 동작 디자인 패턴입니다.
우리가 알아야 할 몇 가지 용어는
이 패턴의 실제 예는 잡지 회사 구독 서비스입니다. 잡지를 구독하고 있다고 가정해 보겠습니다. 여기에서 잡지 회사는 부양 가족(잡지를 구독하는 사람들) 목록을 가질 개체입니다. 새로운 잡지가 발행될 때마다 모든 구독자에게 발송됩니다.
옵저버 패턴의 기술적인 예는 다음과 같습니다.
Android의 LiveData
Python에서 이 패턴을 구현하는 방법을 살펴보겠습니다.
class Subject(object):
def __init__(self):
self.observers = []
def subscribe(self, observer):
self.observers.append(observer)
def unsubscribe(self, observer):
self.observers.remove(observer)
def notify(self, *args, **kwargs):
for observer in self.observers:
observer.notify(*args, **kwargs)
class EmailSender(Subject):
pass
위의 코드에는 옵저버를 구독/구독 취소하는 메서드가 있는
Subject
가 있습니다. 또한 notify
라는 메서드가 있습니다. 사용자가 구독자에게 이메일을 보내려고 할 때마다 이 메서드를 호출할 수 있습니다.Note that we have written the common code for observer pattern in a separate class called
Subject
. This is for reusability and for cleaner code.
class EmailObserver(object):
def __init__(self, email):
self.to_address = email
def notify(self):
self.send_email()
def send_email(self):
print(f"Sending email to {self.to_address}")
if __name__ == '__main__':
email_sender = EmailSender()
subscriber1 = EmailObserver("[email protected]")
subscriber2 = EmailObserver("[email protected]")
email_sender.subscribe(subscriber1)
email_sender.subscribe(subscriber2)
email_sender.notify()
print("Unsubscribing subscriber1")
email_sender.unsubscribe(subscriber1)
email_sender.notify()
위의 코드에서
Observer
를 정의하고 EmailSender
구독했습니다.위의 코드는 다음을 출력합니다
Sending email to abc@gmail.com
Sending email to efg@gmail.com
Unsubscribing subscriber1
Sending email to efg@gmail.com
Reference
이 문제에 관하여(관찰자 패턴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/codewithkarthik/observer-pattern-57cf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)