Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- java
- GCP
- cpu scheduling
- 알고리즘
- GKE
- golang
- BubbleSort
- Python
- 백준
- KAKAO
- LeetCode
- Dynamic Programming
- Backjoon
- Codility
- 그리디
- k8s
- go
- Programmers
- 파이썬
- mobaXTerm
- docker
- easy
- Top-down
- Observer Pattern
- kubernetes
- Singleton Pattern
- github
- 피보나치
- Kotlin
Archives
- Today
- Total
To Be Developer
[Design Pattern] Observer Pattern (옵저버 패턴) 본문
Observer Pattern (감시자)
- 객체지향 프로그래밍에서 객체에 감시자(Observer) 들을 등록을 하여 객체의 상태변화가 발생 하였을 때 자동으로 알리도록 설정하는 패턴
- 주로 이용되는 곳이 유튜브와 같이 구독자 알림과 같은 곳에서 옵저버 패턴이 적용된다.
import abc
class Observer(object):
__metaclass__ = abc.ABCMeta
# 알림 역할을 하는 추상 메서드
@abc.abstractmethod
def notify(self, videos):
pass
# 구독자 알림
class Subscriber(Observer):
def __init__(self, subId):
self.subId = subId
def notify(self, video):
print("{} 님 {} 영상 추가 되었습니다.".format(self.subId, video))
# 객체의 Super 클래스
class Subject(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def addSubscribe(self, subscriber):
pass
@abc.abstractmethod
def delSubscribe(self, subscriber):
pass
# 유튜브 채널
class YouTubeChannel(Subject):
# 생성자
def __init__(self, subscribers=[]):
self.subscribers = subscribers
self.videos = []
# 구독자 추가
def addSubscribe(self, subId):
sub = Subscriber(subId)
self.subscribers.append(sub)
# 구독 취소
def delSubscribe(self, subId):
subs = len(self.subscribers)
try:
for sub in range(subs):
if self.subscribers[sub].subId == subId:
self.subscribers.pop(sub)
print("{} 님의 구독이 취소 되었습니다.".format(subId))
break
except:
print('구독자가 없습니다.')
# 영상 업로드
def upLoadVideo(self, video):
self.videos.append(video)
for i in self.subscribers:
i.notify(video)
if __name__ == "__main__":
s = YouTubeChannel()
s.addSubscribe("YoonHoo")
s.addSubscribe("Hwang")
s.addSubscribe("Jeff")
s.upLoadVideo("배틀그라운드 플레이")
s.delSubscribe("YoonHoo")
s.upLoadVideo("리그오브레전드 플레이")
s.delSubscribe("Jeff")
'Design Pattern' 카테고리의 다른 글
[Design Pattern] Singleton Pattern (싱글톤 패턴) (0) | 2019.04.22 |
---|