意图:

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

适用性:

有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。

你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。

可处理一个请求的对象集合应被动态指定。

#!/usr/bin/python
#coding:utf8 """
Chain
"""
class Handler:
def successor(self, successor):
self.successor = successor class ConcreteHandler1(Handler):
def handle(self, request):
if request > 0 and request <= 10:
print("in handler1")
else:
self.successor.handle(request) class ConcreteHandler2(Handler):
def handle(self, request):
if request > 10 and request <= 20:
print("in handler2")
else:
self.successor.handle(request) class ConcreteHandler3(Handler):
def handle(self, request):
if request > 20 and request <= 30:
print("in handler3")
else:
print('end of chain, no handler for {}'.format(request)) class Client:
def __init__(self):
h1 = ConcreteHandler1()
h2 = ConcreteHandler2()
h3 = ConcreteHandler3() h1.successor(h2)
h2.successor(h3) requests = [2, 5, 14, 22, 18, 3, 35, 27, 20]
for request in requests:
h1.handle(request) if __name__ == "__main__":
client = Client()

最新文章

  1. Launch Mode
  2. phoenix 开发API系列(二)phoenix 各类 api 实现方式
  3. Alpha版本测试报告
  4. iOS中JSONModel的使用
  5. Asp.net 生成验证码
  6. sql char类型的空处理
  7. 蜘蛛牌(hdu 1584 DFS)
  8. HDU 4873 ZCC Loves Intersection(可能性)
  9. 使用javassist运行时动态重新加载java类及其他替换选择
  10. Boost.Hana在visual studio 2017 rc中的残缺使用
  11. Perl正则表达式例子
  12. php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明
  13. BZOJ 3211: 花神游历各国【线段树区间开方问题】
  14. C# 类型基础(上)
  15. ITU-T E.800 有关服务质量(QoS)的术语定义
  16. 使用openssl命令制作ecc证书
  17. 我的Linux操作系统的发行版是什么?版本号是什么?
  18. Viewer.js 是一款强大的 jQuery 图像浏览插件。
  19. 3D-爱心
  20. octomap的简介

热门文章

  1. Python 自学积累(二)
  2. 6.IIs部署与发布
  3. Linq初探
  4. opencv学习笔记——FileStorage类的数据存取操作
  5. SDL结合QWidget的简单使用说明
  6. mysql备份的4种方式
  7. mysql创建和删除表
  8. arthas使用介绍
  9. Python实现支付宝在线支付
  10. sql server递归子节点、父节点,sql查询表结构,根据字段名查所在表