责任链模式的关键在于请求会沿着责任链传播,直到处理成功。我们模拟OA上费用报销的流程,上代码:
from abc import ABCMeta, abstractmethod
class Role(metaclass=ABCMeta):
def setNext(self, role):
self._next_role = role
def getNext(self):
return self._next_role
@abstractmethod
def audit(self, reimbursement):
pass
class DepartmentManager(Role):
def audit(self, reimbursement):
if reimbursement < 500:
print('approved by department manager')
return True
else:
self._next_role.audit(reimbursement)
class DivisionManager(Role):
def audit(self, reimbursement):
if reimbursement < 2000:
print('approved by division manager')
return True
else:
self._next_role.audit(reimbursement)
class GeneralManager(Role):
def audit(self, reimbursement):
if reimbursement < 1000000:
print('approved by general manager')
return True
else:
return False
if __name__ == '__main__':
gm = GeneralManager()
dim = DivisionManager()
dim.setNext(gm)
dem = DepartmentManager()
dem.setNext(dim)
dem.audit(1000)
输出
approved by division manager
请求会从部门主管到部门经理,一直到总经理,如果中间处理成功则不再往后传播了。