一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python使用設計模式中的責任鏈模式與迭代器模式的示例

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

2020-08-15 11:59ponder008 Python

這篇文章主要介紹了Python使用設計模式中的責任鏈模式與迭代器模式的示例,責任鏈模式與迭代器模式都可以被看作為行為型的設計模式,需要的朋友可以參考下

責任鏈模式

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#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內置支持這種模式,所以一般來說,不用自己寫,

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#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使用設計模式中的責任鏈模式與迭代器模式的示例

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美高清在线精品一区二区不卡 | 国产免费精彩视频 | 国产综合久久久久 | 国产在线观看a | 国产一卡二卡3卡4卡四卡在线视频 | 91精品手机国产露脸 | japan孕妇孕交 | 亚洲精品国产一区二区第一页 | 日韩欧美色 | 精品国产麻豆AV无码 | 欧美xxxxx九色视频免费观看 | 国内小情侣一二三区在线视频 | 亚洲精品福利一区二区在线观看 | 国产馆精品推荐在线观看 | 亚洲精品国产专区91在线 | 美女一级ba大片免色 | 午夜福利08550 | 国产综合色在线视频区色吧图片 | 欧美粗黑巨大gay | 国产福利在线免费观看 | 国产成人福利美女观看视频 | 无人区尖叫之夜美女姐姐视频 | 好大~好爽~再进去一点 | 婷婷色在线 | 91久久综合 | 日韩欧美一区黑人vs日本人 | 日韩一区二区三区免费 | 视频精品一区二区三区 | 日本视频在线观看播放 | 国产麻豆91网在线看 | 亚洲精品www久久久久久久软件 | 免费国产影视观看网站入口 | 性关系视频网站 | 韩国最新理论三级在线观看 | 国产精品1024永久免费视频 | 欧美免赞性视频 | 免费看www | 亚飞与亚基国语1080p在线观看 | 波多野结衣伦理在线观看 | 午夜欧美精品久久久久久久久 | 丰满岳乱妇在线观看视频国产 |