| 
  
   Size: 1894 
  
  Comment:  
 | 
  
   Size: 1891 
  
  Comment:  
 | 
| Deletions are marked like this. | Additions are marked like this. | 
| Line 4: | Line 4: | 
| -- flyaflya [[[DateTime(2005-08-04T09:18:06Z)]]] | -- flyaflya [[[DateTime(2005-08-04T09:18:41Z)]]] | 
| Line 12: | Line 12: | 
| attachment:CORPattern.gif | [[CORPattern.gif]] | 
-- flyaflya [DateTime(2005-08-04T09:18:41Z)] TableOfContents
1. Chain of Responsibility(职责链)
1.1. 意图
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合,唯一共同点是在他们之间传递request. 也就是说,来了一个请求,A类先处理,如果没有处理,就传递到B类处理,如果没有处理,就传递到C类处理,就这样象一个链条(chain)一样传递下去。 例如,窗口UI对消息的处理:BR CORPattern.gif
1.2. 代码
模拟UI对消息的处理
   1 class Event:
   2     def __init__( self, name ):
   3         self.name = name
   4 
   5 class Widget:
   6     def __init__( self, parent = None ):
   7         self.__parent = parent
   8     def Handle( self, event ):
   9         handler = 'Handle_' + event.name
  10         if hasattr( self, handler ):
  11             method = getattr( self, handler )
  12             method( event )
  13         elif self.__parent:
  14             self.__parent.Handle( event )
  15         elif hasattr( self, 'HandleDefault' ):
  16             self.HandleDefault( event )   
1.3. 例子
使用: 当用一个event被Handle,将调用Handle_"event.name",如果没有此函数就调用parent来处理此event,如果还没有被处理,就试着交给HandleDefault()。 例如:
