首页 > 编程 > Python > 正文

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

2020-01-04 17:40:17
字体:
来源:转载
供稿:网友
这篇文章主要介绍了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使用设计模式中的责任链模式与迭代器模式的示例

 

迭代器模式
迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

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使用设计模式中的责任链模式与迭代器模式的示例

 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表