国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python使用設計模式中的責任鏈模式與迭代器模式的示例

2019-11-25 16:54:09
字體:
來源:轉載
供稿:網友

責任鏈模式

責任鏈模式:將能處理請求的對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理請求為止,避免請求的發送者和接收者之間的耦合關系。

#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('/n---------python內部迭代-------------')   for item in a.items:     printInfo("%s 請買車票!" % item);   return  if __name__ == '__main__':   clientUI(); 

類圖:

201632154537727.gif (638×401)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 博爱县| 磐石市| 湛江市| 蚌埠市| 砚山县| 太康县| 桂阳县| 宜兴市| 山阳县| 车险| 清流县| 开原市| 靖宇县| 六安市| 建瓯市| 大安市| 呼伦贝尔市| 襄汾县| 马龙县| 冷水江市| 宜城市| 金秀| 广安市| 时尚| 通州市| 桂林市| 施甸县| 平昌县| 金川县| 铁力市| 和顺县| 尖扎县| 芷江| 玛曲县| 仁寿县| 南汇区| 个旧市| 筠连县| 鄄城县| 天门市| 姚安县|