Python使用设计模式中的责任链模式与迭代器模式的示例

Python使用设计模式中的责任链模式与迭代器模式的示例,第1张

概述责任模式责任链模式:将能处理请求的对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理请求为止,避免请求的发送者和接收者之间的耦合关系。

责任链模式

责任链模式:将能处理请求的对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理请求为止,避免请求的发送者和接收者之间的耦合关系。

#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.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.Number))     elif request.RequestType == '加薪' and request.Number <= 500:       printInfo('%s:%s 数量%d 被批准' % (self.name,request.Number))     elif request.RequestType == '加薪' and request.Number > 500:       printInfo('%s:%s 数量%d 再说吧' % (self.name,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使用设计模式中的责任链模式与迭代器模式的示例全部内容,希望文章能够帮你解决Python使用设计模式中的责任链模式与迭代器模式的示例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1204571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存