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()
  • 相关阅读:
    Features for Multi-Target Multi-Camera Tracking and Re-identification论文解读
    CBAM(Convolutional Block Attention Module)使用指南
    j2ee web项目 ssh 中使用junit测试
    log4j 发送日志到邮箱
    java.util.ConcurrentModificationException
    java 项目 报错
    json 传参数到action中 乱码
    TOMCAT 信息
    action 纯注解 笔记
    java 上传图片 打水印
  • 原文地址:https://www.cnblogs.com/ydf0509/p/8525991.html
Copyright © 2011-2022 走看看