1. 程式人生 > >設計模式-行為型模式,責任鏈模式(10)

設計模式-行為型模式,責任鏈模式(10)

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.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(\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)