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()
  • 相关阅读:
    从运维角度浅谈 MySQL 数据库优化
    好的架构不是设计出来的,而是演进出来的
    京东咚咚架构演进
    大型网站的架构
    MySQL开发规范
    MySQL 5.6的72个新特性(译)
    MySQL数据库运维的五大指标
    MySQL5.0、5.1、5.5、5.6功能进化
    MySQL各版本的区别
    ajax该什么时候用
  • 原文地址:https://www.cnblogs.com/ydf0509/p/8525991.html
Copyright © 2011-2022 走看看