zoukankan      html  css  js  c++  java
  • 设计模式-行为型模式,责任链模式(10)

    顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。

    在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

    class Event:
    
        def __init__(self, name):
            self.name = name
    
        def __str__(self):
            return self.name
    
    
    class Widget:
    
        def __init__(self, parent=None):
            self.parent = parent
    
        def handle(self, event):
            handler = 'handle_{}'.format(event)
            if hasattr(self, handler):
                method = getattr(self, handler)
                method(event)
            elif self.parent:
                self.parent.handle(event)
            elif hasattr(self, 'handle_default'):
                self.handle_default(event)
    
    
    class MainWindow(Widget):
    
        def handle_close(self, event):
            print('MainWindow: {}'.format(event))
    
        def handle_default(self, event):
            print('MainWindow Default: {}'.format(event))
    
    
    class SendDialog(Widget):
    
        def handle_paint(self, event):
            print('SendDialog: {}'.format(event))
    
    
    class MsgText(Widget):
    
        def handle_down(self, event):
            print('MsgText: {}'.format(event))
    
    
    def main():
        mw = MainWindow()
        sd = SendDialog(mw)
        msg = MsgText(sd)
    
        for e in ('down', 'paint', 'unhandled', 'close'):
            evt = Event(e)
            print('
    Sending event -{}- to MainWindow'.format(evt))
            mw.handle(evt)
            print('Sending event -{}- to SendDialog'.format(evt))
            sd.handle(evt)
            print('Sending event -{}- to MsgText'.format(evt))
            msg.handle(evt)
    
    if __name__ == '__main__':
        main()
  • 相关阅读:
    redis 中 发布订阅 的 数据类型
    excelExport.js 导出 excel 表格
    Go 出现:err is shadowed during return(err在返回过程中被隐藏)
    Go 服务端 向 firebase Android 端 fcm 信息
    Python全栈day 03
    Python全栈day 01
    开发流程与版本管理规范
    php 魔术常量
    sql 消除重复
    重置mysql密码
  • 原文地址:https://www.cnblogs.com/ydf0509/p/8525991.html
Copyright © 2011-2022 走看看