gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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使用设计模式中的责任链模式与迭代器模式的示例

最后此篇关于Python使用设计模式中的责任链模式与迭代器模式的示例的文章就讲到这里了,如果你想了解更多关于Python使用设计模式中的责任链模式与迭代器模式的示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com