博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式-行为型模式,责任链模式(10)
阅读量:7042 次
发布时间:2019-06-28

本文共 1508 字,大约阅读时间需要 5 分钟。

顾名思义,责任链模式(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()

 

转载地址:http://wbhal.baihongyu.com/

你可能感兴趣的文章
vs2010如何安装qt插件
查看>>
如何开始做一个架构设计 语音预览 - 小薇
查看>>
Centos7 安装redis服务
查看>>
SQL Server-聚焦ROW_NUMBER VS TOP N性能
查看>>
微信小程序 常见问题 小结
查看>>
少用数字来作为参数标识含义
查看>>
不错位的java .class 反编译工具推荐
查看>>
SQLServer 数据库镜像+复制切换方案
查看>>
平安科技移动开发二队技术周报(第十五期)
查看>>
build.gradle & gradle.properties
查看>>
windows server2008服务器下XAMPP集成环境配置apache的SSL证书:
查看>>
JS中同步与异步的理解
查看>>
Django Rest Framework(分页、视图、路由、渲染器)
查看>>
总是容易忘记:enum、int、string之间的快速转换
查看>>
002-localStorage和sessionStorage操作
查看>>
Deepin-添加path
查看>>
设计模式-行为型模式,观察者模式(13)
查看>>
Win8 Metro(C#)数字图像处理--2.41彩色图像密度分割算法
查看>>
Intellij IDEA查看所有断点
查看>>
Top K算法
查看>>