반응형
Notice
Recent Posts
Recent Comments
- Today
- Total
작심삼일
8주차-1. Chain of responsibility 본문
728x90
반응형
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.
틀린 부분은 알려주시면 감사하겠습니다.
어떤 패턴인가
메시지를 보내는 객체와 이를 받아 처리하는 객체들 간의 결합도를 없애기 위한 패턴입니다.
하나의 요청에 대한 처리가 반드시 한 객체에서만 되지 않고, 여러 객체에게 그 처리 기회를 주려는 것입니다.
그렇기 때문에 클라이언트에서 내부 구조를 알 필요가 없습니다.
하지만 구현해야 하는 클래스가 많아지기 때문에 디버깅이 어려워질 수 있습니다.
어떻게 쓰는가
class Handler:
def __init__(self):
self.nextHandler = None
def handle(self):
pass
class Handler4number(self):
def __init__(self, cur):
self.cur = cur
def handle(self):
if isdigit(self.cur):
print('number')
else:
self.nextHandler(self.cur)
class Handler4str(self):
def __init__(self, cur):
self.cur = cur
def handle(self):
if not isdigit(self.cur):
print('str')
else:
self.nextHandler(self.cur)
--------------------------------
h4num = Handler4number()
h4str = Handler4str()
h4num.nextHandler = h4str
h4str.nextHandler = h4num
어디서 활용되는가
이는 책의 내용 (p. 301)을 그대로 가져왔다.
1. 하나 이상의 객체가 요청을 처리해야 하고, 그 요청 처리자 중 어떤 것이 선행자(priori)인지 모를 때, 처리자가 자동으로 확정되어야 합니다.
2. 메시지를 받을 객체를 명시하지 않은 채 여러 객체 중 하나에게 처리를 요청하고 싶을 때
3. 요청을 처리할 수 있는 객체 집합이 동적으로 정의되어야 할 때
My Opinion
한 객체가 한가지 일만 하도록 할 때, 어떤 일이 연속적으로 이루어져야 할 때 사용한다.
next를 이용해 다음에 행해질 행동이나 함수를 지정해서 chain을 만들어준다.
python의 try/except도 이 패턴을 사용한 것이라 한다.
개인적으로는 내가 코딩할 때 이렇게 각 역할마다 객체를 만들지 의문이다. (귀찮아서 잘 안 할 듯 ㅜ)
728x90
반응형
'스터디 > 디자인 패턴' 카테고리의 다른 글
9주차-1. Composite (0) | 2021.07.21 |
---|---|
8주차-2. Iterator (0) | 2021.07.08 |
7주차-2. Visitor (0) | 2021.06.23 |
7주차-1. Flyweight (0) | 2021.06.23 |
6주차-2. Strategy (0) | 2021.06.09 |
Comments