Python使用设计模式中的责任链模式与迭代器模式的示例
这篇文章主要介绍了Python使用设计模式中的责任链模式与迭代器模式的示例,责任链模式与迭代器模式都可以被看作为行为型的设计模式,需要的朋友可以参考下
责任链模式
责任链模式:将能处理请求的对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理请求为止,避免请求的发送者和接收者之间的耦合关系。
#encoding=utf-8
#
#by panda
#职责连模式
def printInfo(info):
print unicode(info,
'utf-8').encode('gbk')
#抽象职责类
class Manager():
successor = None
name = ''
def __init__(self,
name):
self.name =
name
def SetSuccessor(self,
successor):
self.successor = successor
def HandleRequest(self,
request):
pass
#具体职责类:经理
class CommonManager(Manager):
def HandleRequest(self,
request):
if
request.RequestType == '请假' and request.Number <=
2:
printInfo('%s:%s 数量%d 被批准' % (self.name, request.RequestContent,
request.Number))
else:
if self.successor != None:
self.successor.HandleRequest(request)
#具体职责类:总监
class Majordomo(Manager):
def HandleRequest(self,
request):
if
request.RequestType == '请假' and request.Number <=
5:
printInfo('%s:%s 数量%d 被批准' % (self.name, request.RequestContent,
request.Number))
else:
if self.successor != None:
self.successor.HandleRequest(request)
#具体职责类:总经理
class GeneralManager(Manager):
def HandleRequest(self,
request):
if
request.RequestType == '请假':
printInfo('%s:%s 数量%d 被批准' % (self.name, request.RequestContent,
request.Number))
elif
request.RequestType == '加薪' and request.Number <=
500:
printInfo('%s:%s 数量%d 被批准' % (self.name, request.RequestContent,
request.Number))
elif
request.RequestType == '加薪' and request.Number >
500:
printInfo('%s:%s 数量%d 再说吧' % (self.name, request.RequestContent,
request.Number))
class Request():
RequestType = ''
RequestContent = ''
Number = 0
def clientUI():
jinLi =
CommonManager('金力')
zongJian =
Majordomo('宗健')
zhongJingLi =
GeneralManager('钟金利')
jinLi.SetSuccessor(zongJian)
zongJian.SetSuccessor(zhongJingLi)
request = Request()
request.RequestType = '请假'
request.RequestContent = '小菜请假'
request.Number = 1
jinLi.HandleRequest(request)
request.RequestType = '请假'
request.RequestContent = '小菜请假'
request.Number = 5
jinLi.HandleRequest(request)
request.RequestType = '加薪'
request.RequestContent = '小菜要求加薪'
request.Number = 500
jinLi.HandleRequest(request)
request.RequestType = '加薪'
request.RequestContent = '小菜要求加薪'
request.Number = 1000
jinLi.HandleRequest(request)
return
if __name__ == '__main__':
clientUI();
类图:

迭代器模式
迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
python内置支持这种模式,所以一般来说,不用自己写,
#encoding=utf-8
#
#by panda
#迭代器(Iterator)模式
def printInfo(info):
print unicode(info,
'utf-8').encode('gbk')
#迭代器抽象类
class Iterator:
def First(self):
pass
def Next(self):
pass
def IsDone(self):
pass
def CurrentItem(self):
pass
#集合抽象类
class Aggregate:
def
CreateIterator(self):
pass
#具体迭代器类:
class ConcreteIterator(Iterator):
aggregate = None
current = 0
def __init__(self,
aggregate):
self.aggregate = aggregate
self.current
= 0
def First(self):
return
self.aggregate[0]
def Next(self):
ret =
None
self.current
= 1
if(self.current <
len(self.aggregate)):
ret = self.aggregate[self.current]
return
ret
def IsDone(self):
if(self.current <
len(self.aggregate)):
return False
else:
return True
def CurrentItem(self):
ret =
None
if(self.current <
len(self.aggregate)):
ret = self.aggregate[self.current]
return
ret
#具体集合类
class ConcreteAggregate(Aggregate):
items = None
def __init__(self):
self.items =
[]
def clientUI():
a = ConcreteAggregate()
a.items.append('大鸟')
a.items.append('小菜')
a.items.append('行李')
a.items.append('老外')
a.items.append('公交内部员工')
a.items.append('小偷')
printInfo('---------迭代器模式-------------')
i =
ConcreteIterator(a.items)
item = i.First()
while(False ==
i.IsDone()):
printInfo("%s 请买车票!" % i.CurrentItem());
i.Next()
printInfo('\n---------python内部迭代-------------')
for item in a.items:
printInfo("%s 请买车票!" % item);
return
if __name__ == '__main__':
clientUI();
类图:

Python使用设计模式中的责任链模式与迭代器模式的示例的更多相关文章
- 如何在C#/.NET Core中使用责任链模式
原文:Chain Of Responsbility Pattern In C#/.NET Core 作者:Wade 译者:Lamond Lu 最近我有一个朋友在研究经典的"Gang Of F ...
- 重学 Java 设计模式:实战责任链模式「模拟618电商大促期间,项目上线流程多级负责人审批场景」
作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 场地和场景的重要性 射击
- Java设计模式13:责任链模式
前言 来菜鸟这个大家庭10个月了,总得来说比较融入了环境,同时在忙碌的工作中也深感技术积累不够,在优秀的人身边工作必须更加花时间去提升自己的技术能力.技术视野,所以开一个系列文章,标题就轻松一点叫做最 ...
- Java网络编程--Netty中的责任链
Netty中的责任链 设计模式 - 责任链模式 责任链模式(Chain of Responsibility Pattern)是一种是行为型设计模式,它为请求创建了一个处理对象的链.其链中每一个节点都看 ...
- 设计模式学习笔记(十六)迭代器模式及其在Java 容器中的应用
迭代器(Iterator)模式,也叫做游标(Cursor)模式.我们知道,在Java 容器中,为了提高容器遍历的方便性,把遍历逻辑从不同类型的集合类中抽取出来,避免向外部暴露集合容器的内部结构. 一. ...
- Java进阶篇设计模式之九----- 解释器模式和迭代器模式
前言 在上一篇中我们学习了行为型模式的责任链模式(Chain of Responsibility Pattern)和命令模式(Command Pattern).本篇则来学习下行为型模式的两个模式, 解 ...
- Java设计模式之九 ----- 解释器模式和迭代器模式
前言 在上一篇中我们学习了行为型模式的责任链模式(Chain of Responsibility Pattern)和命令模式(Command Pattern).本篇则来学习下行为型模式的两个模式, 解 ...
- 设计模式(十):从电影院中认识"迭代器模式"(Iterator Pattern)
上篇博客我们从醋溜土豆丝与清炒苦瓜中认识了“模板方法模式”,那么在今天这篇博客中我们要从电影院中来认识"迭代器模式"(Iterator Pattern).“迭代器模式”顾名思义就是 ...
- Java设计模式学习记录-责任链模式
前言 已经把五个创建型设计模式和七个结构型设计模式介绍完了,从这篇开始要介绍行为型设计模式了,第一个要介绍的行为型设计模式就是责任链模式(又称职责链模式). 责任链模式 概念介绍 责任链模式是为了避免 ...
随机推荐
- JQgrid处理json数据
jqGrid 实例中文版网址:http://blog.mn886.net/jqGrid/国外官网:http://www.trirand.com/blog/jqgrid/jqgrid.html http ...
- 微信小程序导入Vant报错
作者:如也_d1c0链接:https://www.jianshu.com/p/0d2332984f8c来源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处. 先放出来Vant ...
- HDU-1573-X问题(线性同余方程组)
链接: https://vjudge.net/problem/HDU-1573 题意: 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1] ...
- docker学习(六)
一.Dockerfile使用 Dockerfile 可以允许用户创建自定义的镜像. 1.基本结构Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行.一般的,Dockerfile ...
- 六十一.常用组件 、 Kafka集群 、 Hadoop高可用
1.Zookeeper安装搭建Zookeeper集群并查看各服务器的角色停止Leader并查看各服务器的角色 1.1 安装Zookeeper1)编辑/etc/hosts ,所有集群主机可以相互 pin ...
- Gym - 102346G Getting Confidence 最小费用最大流
Gym - 102346GGetting Confidence 题意:n*n的格子,每个格子上有一个数,要求每行每列都只能拿一个数,使得乘积最大,然后输出每列选择的是第几行的数. 如果是加法的话,那么 ...
- P2037 电话号码
题目描述 一串由长长的数字组成的电话号码通常很难记忆.为了方便记忆,有种方法是用单词来方便记忆.例如用“Three Tens”来记忆电话3-10-10-10. 电话号码的标准形式是七位数字,中间用连字 ...
- jquery做个折叠面板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 在本机上用IO流实现复制粘贴功能
/** * 复制文件夹 * @param sourcePath * @param targetPath * @throws IOException */ public void copyFolder( ...
- C语言应用--数据类型定制一结构体数组
结构体定义成功后,其实和c语言内部的类型区别也不大了,自然可以用来定义结构体类型的数组了.我们根据结构体定义的方式不同,分别用多种方式定义结构体数组: