## page was renamed from zhArticleTemplate ##language:zh #pragma section-numbers on -- flyaflya [<>] <> == Chain of Responsibility(职责链) == === 意图 === 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合,唯一共同点是在他们之间传递request. 也就是说,来了一个请求,A类先处理,如果没有处理,就传递到B类处理,如果没有处理,就传递到C类处理,就这样象一个链条(chain)一样传递下去。 例如,窗口UI对消息的处理:<
> {{attachment:CORPattern.gif}} === 代码 === 模拟UI对消息的处理 {{{ #!python class Event: def __init__( self, name ): self.name = name class Widget: def __init__( self, parent = None ): self.__parent = parent def Handle( self, event ): handler = 'Handle_' + event.name if hasattr( self, handler ): method = getattr( self, handler ) method( event ) elif self.__parent: self.__parent.Handle( event ) elif hasattr( self, 'HandleDefault' ): self.HandleDefault( event ) }}} === 例子 === 使用: 当用一个event被Handle,将调用Handle_"event.name",如果没有此函数就调用parent来处理此event,如果还没有被处理,就试着交给HandleDefault()。 例如: {{{ #!python class MainWindow(Widget): def Handle_close( self, event ): print 'MainWindow: ' + event.name def HandleDefault( self, event ): print 'Default: ' + event.name class Button( Widget ): def Handle_click( self, event ): print 'Button: ' + event.name }}} === 特殊说明 ===