python设计模式(十五):责任链模式
将多个处理方法连接成一条链条,请求将在这条链条上流动直到该链条中有一个节点可以处理该请求;通常这条链条是一个对象包含对另一个对象的引用而形成链条,每个节点有对请求的条件,当不满足条件将传递给下一个节点处理。
示例code:
创建三个不同的对象,每个对象只处理指定范围内的数字,不属于自己的就传递给下一个对象。
class Bases:
def __init__(self, obj=None):
self.obj = obj
def screen(self, number):
pass
class A(Bases):
def screen(self, number):
if 200 > number > 100:
print("{} 划入A集合".format(number))
else:
self.obj.screen(number)
class B(Bases):
def screen(self, number):
if number >= 200:
print("{} 划入B集合".format(number))
else:
self.obj.screen(number)
class C(Bases):
def screen(self, number):
if 100 >= number:
print("{} 划入C集合".format(number))
if __name__ == '__main__':
test = [10, 100, 150, 200, 300]
c = C()
b = B(c)
a = A(b)
for i in test:
a.screen(i)
-------------------
10 划入C集合
100 划入C集合
150 划入A集合
200 划入B集合
300 划入B集合
责任链模式有几个要点:
-
一个对象中含有另一个对象的引用以此类推形成链条
-
每个对象中应该有明确的责任划分即处理请求的条件
-
链条的最后一节应该设计成通用请求处理,以免出现漏洞
-
请求应该传入链条的头部
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
python设计模式(十四):模板方法模式
定义一个算法或者流程,部分环节设计为外部可变,用类似于模板的思想来实例化一个实体,可以往模板中填充不同的内容;在模板思想下,实体的整体框架是确定的,他是一个模板,但是模板下内容可变,从而实现了动态的更新流程或算法。 示例code: #encoding=utf-8"""实现一个客户点单后的处理流程流程"""classUser: def__init__(self,name,shop,times,number): self.name=name self.shop=shop self.times=times self.number=numberclassHandle: def__init__(self,user=None): self.user=user defInvoicen(self): """打印小票""" string="打印小票"\ "客户:{}"\ "商品:{}"\ "数量:{}"\ "时间:{}".format(self.user.name,self.user.shop,self.user.number,self.user.times) print(string) defMake...
- 下一篇
python设计模式(十六):命令模式
“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern) 命令模式应该有一下几个角色: Command: 定义命令的接口,声明执行的方法,可以理解为一个基类。 ConcreteCommand: 命令接口实现对象,通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。 Receiver: 接收者,真正执行命令的对象。任何类都可能成为一个接收者,只要它能够实现命令要求实现的相应功能。 Invoker: 要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象,相当于使用命令对象的入口。 Client: 创建具体的命令对象,组装命令对象和接收者,或许,把这个Client称为装配者会更好理解,因为真正使用命令的客户端是从Invoker来触发执行。 示例code: #-*-coding:utf-8-*-classCommand: """声明...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7,8上快速安装Gitea,搭建Git服务器