责任链

责任链模式用于解除请求事件发送者与处理者之间的关系,能够处理请求的对象会连成一条链,并且沿着这条链来传递请求,直到有一个对象获取并处理了请求为止。可以想象一下击鼓传花游戏的场景。

以下给出一个简单的示例。

class Handler:
	def handle(self, request):
		pass
	
	def next(self, next):
		self.next = next
		return self.next
	
	def forward(self, request):
		self.next.handle(request)


class HandlerOne(Handler):
	def handle(self, request):
		if request.type == 'type1':
			print("Handler 1 process")
		else:
			self.forward(request)


class HandlerTwo(Handler):
	def handle(self, request):
		if request.type == 'type2':
			print("Handler 1 process")
		else:
			print("end of chain")


requests = ["type1", "type2", "type3"]
h1 = HandlerOne()
h1.next(HandlerTwo())
for request in requests:
	h1.handle(request)