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()
  • 相关阅读:
    【NOI2008】志愿者招募
    【NOI2015】小园丁和老司机
    【TJOI2007】小朋友
    【HNOI2008】神奇的国度
    【CTSC2014】企鹅QQ
    【CQOI2014】通配符匹配
    【JSOI2008】火星人
    【SCOI2007】压缩
    【ZJOI2009】对称的正方形
    【LOJ#6066】同构子树
  • 原文地址:https://www.cnblogs.com/ydf0509/p/8525991.html
Copyright © 2011-2022 走看看