設計模式-行為型模式,責任鏈模式(10)
阿新 • • 發佈:2018-03-08
body getattr () lose IT elf default 行為型 dial
顧名思義,責任鏈模式(Chain of Responsibility Pattern)為請求創建了一個接收者對象的鏈。這種模式給予請求的類型,對請求的發送者和接收者進行解耦。這種類型的設計模式屬於行為型模式。
在這種模式中,通常每個接收者都包含對另一個接收者的引用。如果一個對象不能處理該請求,那麽它會把相同的請求傳給下一個接收者,依此類推。
class Event: def __init__(self, name): self.name = name def __str__(self): return self.nameclass 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(‘\nSending 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()
設計模式-行為型模式,責任鏈模式(10)