最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用設(shè)計(jì)模式中的責(zé)任鏈模式與迭代器模式的示例

 更新時(shí)間:2016年03月02日 15:47:36   作者:ponder008  
這篇文章主要介紹了Python使用設(shè)計(jì)模式中的責(zé)任鏈模式與迭代器模式的示例,責(zé)任鏈模式與迭代器模式都可以被看作為行為型的設(shè)計(jì)模式,需要的朋友可以參考下

責(zé)任鏈模式

責(zé)任鏈模式:將能處理請(qǐng)求的對(duì)象連成一條鏈,并沿著這條鏈傳遞該請(qǐng)求,直到有一個(gè)對(duì)象處理請(qǐng)求為止,避免請(qǐng)求的發(fā)送者和接收者之間的耦合關(guān)系。

#encoding=utf-8 
# 
#by panda 
#職責(zé)連模式 
 
def printInfo(info): 
  print unicode(info, 'utf-8').encode('gbk') 
 
#抽象職責(zé)類 
class Manager(): 
  successor = None 
  name = '' 
  def __init__(self, name): 
    self.name = name 
   
  def SetSuccessor(self, successor): 
    self.successor = successor 
   
  def HandleRequest(self, request): 
    pass 
 
#具體職責(zé)類:經(jīng)理 
class CommonManager(Manager): 
  def HandleRequest(self, request): 
    if request.RequestType == '請(qǐng)假' and request.Number <= 2: 
      printInfo('%s:%s 數(shù)量%d 被批準(zhǔn)' % (self.name, request.RequestContent, request.Number)) 
    else: 
      if self.successor != None: 
        self.successor.HandleRequest(request) 
         
#具體職責(zé)類:總監(jiān) 
class Majordomo(Manager): 
  def HandleRequest(self, request): 
    if request.RequestType == '請(qǐng)假' and request.Number <= 5: 
      printInfo('%s:%s 數(shù)量%d 被批準(zhǔn)' % (self.name, request.RequestContent, request.Number)) 
    else: 
      if self.successor != None: 
        self.successor.HandleRequest(request) 
 
#具體職責(zé)類:總經(jīng)理 
class GeneralManager(Manager): 
  def HandleRequest(self, request): 
    if request.RequestType == '請(qǐng)假': 
      printInfo('%s:%s 數(shù)量%d 被批準(zhǔn)' % (self.name, request.RequestContent, request.Number)) 
    elif request.RequestType == '加薪' and request.Number <= 500: 
      printInfo('%s:%s 數(shù)量%d 被批準(zhǔn)' % (self.name, request.RequestContent, request.Number)) 
    elif request.RequestType == '加薪' and request.Number > 500: 
      printInfo('%s:%s 數(shù)量%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 = '請(qǐng)假' 
  request.RequestContent = '小菜請(qǐng)假' 
  request.Number = 1 
  jinLi.HandleRequest(request) 
   
  request.RequestType = '請(qǐng)假' 
  request.RequestContent = '小菜請(qǐng)假' 
  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)

迭代器模式
迭代器模式:提供一種方法順序訪問一個(gè)聚合對(duì)象中的各個(gè)元素,而又不暴露該對(duì)象的內(nèi)部表示。

python內(nèi)置支持這種模式,所以一般來(lái)說,不用自己寫,

#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('公交內(nèi)部員工') 
  a.items.append('小偷') 
   
   
  printInfo('---------迭代器模式-------------') 
  i = ConcreteIterator(a.items) 
  item = i.First() 
  while(False == i.IsDone()): 
    printInfo("%s 請(qǐng)買車票!" % i.CurrentItem()); 
    i.Next() 
     
  printInfo('\n---------python內(nèi)部迭代-------------') 
  for item in a.items: 
    printInfo("%s 請(qǐng)買車票!" % item); 
  return 
 
if __name__ == '__main__': 
  clientUI(); 

類圖:

201632154537727.gif (638×401)

相關(guān)文章

最新評(píng)論

循化| 禄劝| 怀柔区| 扶风县| 光山县| 元氏县| 固阳县| 洪洞县| 铁力市| 洛阳市| 石城县| 远安县| 江北区| 井研县| 灵宝市| 新郑市| 桦川县| 镇坪县| 彭州市| 峡江县| 嘉善县| 峨山| 罗甸县| 洛浦县| 溆浦县| 灯塔市| 康乐县| 浦城县| 临汾市| 孟津县| 嘉义县| 丹江口市| 嘉定区| 嘉义市| 克东县| 台中市| 永丰县| 洱源县| 建平县| 长汀县| 惠州市|