京公网安备 11010802034615号
经营许可证编号:京B2-20210330
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();
类图:
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在业务数据分析中,按天拆分统计夜间时段的数据是高频需求——比如电商夜间订单监测、平台夜间用户活跃度分析、运维系统夜间异常 ...
2026-07-29在机器学习建模与特征工程实践中,判断不同特征对模型预测效果的贡献度,是特征筛选、模型解释、业务归因的核心环节。特征置换重 ...
2026-07-29 很多数据分析师精通Excel单元格操作,但当被问到“表结构数据的基本处理单位是什么”“字段和记录的本质区别”“为什么表结 ...
2026-07-29【核心关键词】岗位、数字化、经验、课程、方法论、决策、企业、大方向、数据分析、销售管理、理论知识、思维方式、分析销售、 ...
2026-07-28在问卷调研、用户分群、效果对比等业务数据分析中,分类变量的关联性与差异性验证是高频需求。卡方检验作为针对离散分类数据的经 ...
2026-07-28 数据分析师八成以上的时间在和数据表格打交道,但许多人拿到Excel后习惯性地先算、先分析,结果回头发现漏了一列关键数据, ...
2026-07-28在Excel数据分析与报表制作中,数据透视表是快速完成多维度汇总、分组统计的核心工具。很多从业者在得到透视表汇总结果后,为了 ...
2026-07-27 很多数据分析师每天与Excel打交道,但当被问到“表格结构数据的基本处理单位是什么”“数据类型误判会引发哪些分析错误”“ ...
2026-07-27当下,我们已然步入数据要素价值全面释放的智能时代。数据不再只是零散的数字记录,更是驱动新质生产力运转的核心动能、滋养人工 ...
2026-07-27【核心关键词】客户、数据分析、指标体系、数据采集、数据指标、业务数据、分析思路、业务需求、分析方法 【专访摘要】本次 CDA ...
2026-07-24在数据分析、业务建模与数字化运营体系中,原始业务数据普遍存在缺失、重复、异常、口径不一致等质量问题,直接用于分析与建模会 ...
2026-07-24 很多数据分析师能熟练计算均值、标准差,但当被问到“如何用一张图让业务方3秒内看懂核心结论”“面对不同数据类型该怎么选 ...
2026-07-24在数据驱动的精细化运营体系中,指标是业务判断、效果复盘、策略优化的核心依据。随着企业数据化程度提升,指标数量持续膨胀,但 ...
2026-07-23在用户运营与产品增长体系中,留存是衡量产品真实价值与用户粘性的核心标尺,也是决定用户生命周期价值、获客投产比的底层因素。 ...
2026-07-23 很多数据分析师精通Excel、SQL、Python等工具,但当被问到“面对一个具体的业务问题,该用什么分析方法”“描述性分析和诊断 ...
2026-07-23【核心关键词】埋点、产品、互联网、数据库、决策、数据分析、产品经理、商业模式、移动互联网、指标体系、运营模块、大数据平 ...
2026-07-22在高并发、大数据量的业务系统中,单表数据量达到千万级甚至亿级后,会出现查询性能骤降、索引维护成本飙升、存储扩容困难等问题 ...
2026-07-22 很多企业团队并非缺乏指标,而是陷入“指标失控”:仪表盘上堆满实时跳动的数据,却无法回答“当前瓶颈在哪、下一步该做什么 ...
2026-07-22在金融风控、企业运营、行业研究等数据分析场景中,大量数据以面板数据形态存在:例如多家分支机构连续多个季度的风险指标、多位 ...
2026-07-21 很多数据分析师每天都在计算指标、制作报表,但当被问到“什么叫指标数据元”“指标数据标准包含哪些核心维度”“指标数据质 ...
2026-07-21