欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)置支持這種模式,所以一般來說,不用自己寫,

#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)文章

  • python連接sql?server數(shù)據(jù)庫(kù)的方法實(shí)戰(zhàn)

    python連接sql?server數(shù)據(jù)庫(kù)的方法實(shí)戰(zhàn)

    當(dāng)我們用Python來編寫網(wǎng)站,必須要能夠通過python操作數(shù)據(jù)庫(kù),下面這篇文章主要給大家介紹了關(guān)于python連接sql?server數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Python set常用操作函數(shù)集錦

    Python set常用操作函數(shù)集錦

    set是一個(gè)無序且不重復(fù)的元素集合。這篇文章主要介紹了Python set常用操作函數(shù)集錦,需要的朋友可以參考下
    2017-11-11
  • Python中字節(jié)數(shù)組和16進(jìn)制字符串轉(zhuǎn)換方式

    Python中字節(jié)數(shù)組和16進(jìn)制字符串轉(zhuǎn)換方式

    這篇文章主要介紹了Python中字節(jié)數(shù)組和16進(jìn)制字符串轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Python 的 __str__ 和 __repr__ 方法對(duì)比

    Python 的 __str__ 和 __repr__ 方法對(duì)比

    這篇文章主要介紹了Python 的 __str__ 和 __repr__ 方法的相關(guān)資料,幫助大家區(qū)分__str__ 和 __repr__ ,感興趣的朋友可以了解下
    2020-09-09
  • django創(chuàng)建最簡(jiǎn)單HTML頁(yè)面跳轉(zhuǎn)方法

    django創(chuàng)建最簡(jiǎn)單HTML頁(yè)面跳轉(zhuǎn)方法

    今天小編就為大家分享一篇django創(chuàng)建最簡(jiǎn)單HTML頁(yè)面跳轉(zhuǎn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • PyQt5每天必學(xué)之滑塊控件QSlider

    PyQt5每天必學(xué)之滑塊控件QSlider

    這篇文章主要為大家詳細(xì)介紹了PyQt5每天必學(xué)之滑塊控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • pytorch實(shí)現(xiàn)建立自己的數(shù)據(jù)集(以mnist為例)

    pytorch實(shí)現(xiàn)建立自己的數(shù)據(jù)集(以mnist為例)

    今天小編就為大家分享一篇pytorch實(shí)現(xiàn)建立自己的數(shù)據(jù)集(以mnist為例),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python操作手機(jī)app的實(shí)現(xiàn)步驟

    python操作手機(jī)app的實(shí)現(xiàn)步驟

    本文主要介紹了python操作手機(jī)app的實(shí)現(xiàn)步驟,本文將結(jié)合實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 利用python檢測(cè)文本相似性的三種方法

    利用python檢測(cè)文本相似性的三種方法

    文本查重,也稱為文本去重,是一項(xiàng)旨在識(shí)別文本文檔之間的相似性或重復(fù)性的技術(shù)或任務(wù),它的主要目標(biāo)是確定一個(gè)文本文檔是否包含與其他文檔相似或重復(fù)的內(nèi)容,本文給大家介紹了利用python檢測(cè)文本相似性的原理和方法,需要的朋友可以參考下
    2023-11-11
  • Python生產(chǎn)者與消費(fèi)者模型中的優(yōu)勢(shì)介紹

    Python生產(chǎn)者與消費(fèi)者模型中的優(yōu)勢(shì)介紹

    這篇文章主要介紹了python多進(jìn)程中的生產(chǎn)者和消費(fèi)者模型優(yōu)勢(shì),生產(chǎn)者是指生產(chǎn)數(shù)據(jù)的任務(wù),消費(fèi)者是指消費(fèi)數(shù)據(jù)的任務(wù)。當(dāng)生產(chǎn)者的生產(chǎn)能力遠(yuǎn)大于消費(fèi)者的消費(fèi)能力,生產(chǎn)者就需要等消費(fèi)者消費(fèi)完才能繼續(xù)生產(chǎn)新的數(shù)據(jù)
    2023-03-03

最新評(píng)論