设计模式_职责模式


职责模式也称为责任链模式,它将请求的发生在和接受者解耦.客户端不需要知道请求处理者的明确信息和处理的具体逻辑,甚至不需要知道链的结构,它只需要将请求进行发送即可.

场景:  员工->请假--> A领导-->B领导-->C负责人
 

在设计职责模式的时候,需要注意的点:

  1. 请求者和请求内容: 确认谁要发送请求,发送请求的对象成为请求者,请求的内容通过发送请求时的参数进行传递.
  2. 有哪些责任人: 责任人是构成责任链的关键要素.请求的流动方向是链条中的线.而责任人这是链条上的点,线和点共同构成一条链条.
  3. 对责任人进行抽象: 对责任人进行抽象,使得他们的责任可传递性.
  4. 责任人可以自由组合:责任链上的责任人可以根据业务的具体逻辑进行自由的组合和排序.

优点:

  • 降低耦合度
  • 简化了对象
  • 增强给对象指派职责的灵活性
  • 增加新的处理类很方便

缺点:

  • 不能保证请求一定被接收
  • 系统的性能会受到一定影响.

应用场景

  • 有多个对象可以处理同一个请求,具体哪个对象处理该请求在运行时自动确定
  • 请求的处理具体有明显的传递关系
  • 请求的处理流程和顺序需要程序运行时动态确定
  • 参加的审批流程.

Demo1


class Handle(object):
    def __init__(self):
        self.successor=""

    def setsuccessor(self,successor):
        self.successor=successor

    def handle_request(self,request):
        pass

class ConcreteHandle1(Handle):
    def handle_request(self,request):
        if request>0 and request<=10:
            print("ConcreteHandle1 处理请求:",request)
        else:
            self.successor.handle_request(request)

class ConcreteHandle2(Handle):
    def handle_request(self,request):
        if request>10 and request<=20:
            print("ConcreteHandle2 处理情况:",request)
        else:
            self.handle_request(request)

if __name__ == '__main__':
    c1=ConcreteHandle1()
    c2=ConcreteHandle2()
    c1.setsuccessor(c2)

    for i in range(5,17):
        c1.handle_request(i)

おすすめ

転載: blog.csdn.net/qq_30901367/article/details/121595818