责任链模式----设计模式-------python

'''


CHAIN OF RESPONSIBLEITY——责任链模式?
  晚上去上英语课,为了好开溜坐到了最后一排,哇,前面坐了好几个漂亮的MM哎,找张纸条,写上“Hi,可以做我的女朋友吗?如果不愿意请向前传”,纸条就一个接一个的传上去了,糟糕,传到第一排的MM把纸条传给老师了,听说是个老处女呀,快跑!  
  责任链模式:在责任链模式中,很多对象由每一个对象对其下家的引用而接   起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。   


:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
角色:


抽象处理者(Handler)
具体处理者(ConcreteHandler)
客户端(Client)
例:


请假部门批准:leader—>部门经理—>总经理
Javascript事件浮升机制
适用场景:


有多个对象可以处理一个请求,哪个对象处理由运行时决定
在不明确接收者的情况下,向多个对象中的一个提交一个请求
优点:


降低耦合度:一个对象无需知道是其他哪一个对象处理其请求
缺点:


请求不保证被接收:链的末端没有处理或链配置错




'''


#======================1==============================
# from abc import ABCMeta,abstractmethod
#
# class Handler(metaclass=ABCMeta):
#     @abstractmethod
#     def handle_level(self,day):
#         pass
#
# class GeneralManagerHandler(Handler):
#     def handle_level(self,day):
#         if day < 10:
#             print("总经理批准%s天假" % day)
#             return True
#         else:
#             print("呵呵")
#             return False
#
# class DepartmentManagerHandler(Handler):
#     def __init__(self):
#         self.successor = GeneralManagerHandler()
#     def handle_level(self,day):
#         if day < 7:
#             print("部门经理批准%s天假" % day)
#         else:
#             print("部门经理,无权准假")
#             return self.successor.handle_level(day)
#
# class ProjectDirectorHandler(Handler):
#     def __init__(self):
#         self.successfor=DepartmentManagerHandler()
#     def handle_level(self,day):
#         if day < 3:
#             print("项目主管批准%s天假" % day)
#             return True
#         else:
#             print("项目主管无权准假")
#             return self.successfor.handle_level(day)
#
#
# day =8
# h =ProjectDirectorHandler()
# print(h.handle_level(day))
#====================2===================


# from abc import ABCMeta,abstractmethod
#
# class Handler(metaclass=ABCMeta):
#     @abstractmethod
#     def add_event(self,func):
#         pass
#
#     @abstractmethod
#     def handle(self):
#         pass
#
# class BodyHandler(Handler):
#     def __init__(self):
#         self.func=None
#
#     def add_event(self,func):
#         self.func=func
#     def handle(self):
#         if self.func:
#             return self.func()
#         else:
#             print("已经到达最后一集,无法处理。")
#
#
# class ElementHandler(Handler):
#     def __init__(self,successor):
#         self.func=None
#         self.successor=successor
#
#     def add_event(self,func):
#         self.func=func
#     def handle(self):
#         if self.func:
#             return self.func
#         else:
#             return self.successor.handle()
#
# body={"type":"body","name":"body","children":[],"father":None}
# div={"type":"div","name":"div","children":[],"father":body}
#
# a={"type":"a","name":"a","children":[],"father":div}
#
# body["children"].append(div)
# div["children"].append(a)
#
# body["event_handler"] =BodyHandler()
# div["event_handler"]=ElementHandler(div["father"]["event_handler"])
# a["event_handler"]=ElementHandler(a["father"]["event_handler"])
#
# def attach_event(element,func):
#     element["event_handler"].add_event(func)
#
# def func_a():
#     print("Zhe shi gei a de function")
#
# def func_div():
#     print("zhe shi gei div de function")
# def func_body():
#     print("zheshi gei body de hanshu")
#
# attach_event(a,func_a)
# attach_event(div,func_div)
# attach_event(body,func_body)
#
# a["event_handler"].handle()()




#=======================3=====================================
from abc import ABCMeta,abstractmethod


class Handler(metaclass=ABCMeta):
    @abstractmethod
    def auditing(self,profit):
        pass


class GeneralManagerHandler(Handler):
    def auditing(self,profit):
        if profit < 1000:
            print("好好奋斗,争取在得到%s" %profit)
        else:
            print("下次再说吧")




class DepartmentManagerHandler(Handler):
    def __init__(self):
        self.lead=GeneralManagerHandler()
    def auditing(self,profit):
        if profit <500:
            print("好好奋斗,奖金少不了,你的 %s" % (profit-100))
        else:
            return self.lead.auditing(profit)


class HeadMan(Handler):
    def __init__(self):
        self.lead=DepartmentManagerHandler()


    def auditing(self,profit):
        if profit < 200:
            print("走一块喝酒去,一人50元")
        else:
            return self.lead.auditing(profit)


profit=330
h=HeadMan()
h.auditing(profit)

猜你喜欢

转载自blog.csdn.net/weixin_42040854/article/details/80612706