请选择 进入手机版 | 继续访问电脑版
楼主: CDA网校
613 0

[程序分享] Python使用设计模式中的责任链模式与迭代器模式的示例——CDA人工智能学院 [推广有奖]

管理员

大师

61%

还不是VIP/贵宾

-

威望
3
论坛币
29523 个
通用积分
3001.1581
学术水平
259 点
热心指数
267 点
信用等级
234 点
经验
194171 点
帖子
5074
精华
19
在线时间
3682 小时
注册时间
2019-9-13
最后登录
2024-4-16

初级热心勋章

CDA网校 学生认证  发表于 2021-1-19 09:25:57 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
CDA人工智能学院致力于以优质的人工智能在线教育资源助力学员的DT职业梦想!课程内容涵盖数据分析机器学习深度学习人工智能tensorFlowPyTorch、知识图谱等众多核心技术及行业案例,让每一个学员都可以在线灵活学习,快速掌握AI时代的前沿技术。PS:私信我即可获取CDA会员1个月免费试听机会

这篇文章主要介绍了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();
类图:

20180711062212_10667.png

29C446FFF799701B5098749DB47B5891.jpg

扫码关注CDA公众号,即可获取最新版数据分析题库大全CDA免费精品课70+


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python 人工智能 CDA Request Success

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-17 00:30