最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-27 14:35:36
文档

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

Python使用设计模式中的责任链模式与迭代器模式的示例:责任链模式 责任链模式:将能处理请求的对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理请求为止,避免请求的发送者和接收者之间的耦合关系。 #encoding=utf-8 # #by panda #职责连模式 def printInfo(info): print uni
推荐度:
导读Python使用设计模式中的责任链模式与迭代器模式的示例:责任链模式 责任链模式:将能处理请求的对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理请求为止,避免请求的发送者和接收者之间的耦合关系。 #encoding=utf-8 # #by panda #职责连模式 def printInfo(info): print uni
责任链模式

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

#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(); 

类图:

201632154510682.gif (506×302)

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

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('
---------python内部迭代-------------') 
 for item in a.items: 
 printInfo("%s 请买车票!" % item); 
 return 
 
if __name__ == '__main__': 
 clientUI(); 

类图:

201632154537727.gif (638×401)

文档

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

Python使用设计模式中的责任链模式与迭代器模式的示例:责任链模式 责任链模式:将能处理请求的对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理请求为止,避免请求的发送者和接收者之间的耦合关系。 #encoding=utf-8 # #by panda #职责连模式 def printInfo(info): print uni
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top