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设计模式学习记录-责任链模式
前言 已经把五个创建型设计模式和七个结构型设计模式介绍完了,从这篇开始要介绍行为型设计模式了,第一个要介绍的行为型设计模式就是责任链模式(又称职责链模式). 责任链模式 概念介绍 责任链模式是为了避免 ...
随机推荐
- Sql Server2008——远程过程调用失败
今天正在敲机房,清理软件提醒垃圾太多并且电脑也特别卡,我就想着既然这样就清理一下得了,结果就是:No zuo No die,SQL server数据库连接不上了.不过从另一方面来说这也是一次学习的机会 ...
- Robot Framework--接口测试中常见的四种POST方式
写接口测试用例时,遇到以json格式提交数据时,报错,Request如下图: Response如下图: 改成form格式提交,可以正常运行,如下图: 代码如下: ------------------- ...
- Java8新特性--函数式编程
在jdk8中什么是函数式接口: 1.被@FunctionalInterface注解修饰的. 2.接口里边只有一个非default的方法. 满足以上2个条件的即为函数式接口,ps:即使一个接口没有被@F ...
- 并发编程大师系列之:线程的定义和中断 interrupt
1.启动线程的三种方式: 1.1继承Thread类 public static class UseThread extends Thread { public void run() { System. ...
- 学习路线 (转自 https://mp.weixin.qq.com/s/_FIGSda6wWL-5LXMQAk3IA )
- Vue Router 使用方法
安装 直接下载 / CDN https://unpkg.com/vue-router/dist/vue-router.js Unpkg.com 提供了基于 NPM 的 CDN 链接.上面的链接会一直指 ...
- 43、扩展原理-@EventListener与SmartInitializingSingleton
43.扩展原理-@EventListener与SmartInitializingSingleton 还可以使用 @EventListener; 来监听事件 原理:使用EventListenerMeth ...
- @select注解中可以用条件构造器
https://mp.baomidou.com/guide/wrapper.html#lambda https://blog.csdn.net/weixin_42236404/article/deta ...
- mybatis-传多个参数
第一种方案:下标传参 DAO层的函数方法 Public User selectUser(String name, String area); 对应的Mapper.xml <select id=& ...
- TensorFlow(十四):谷歌图像识别网络inception-v3下载与查看结构
上代码: import tensorflow as tf import os import tarfile import requests #inception模型下载地址 inception_pre ...