責任鏈模式:將能處理請求的對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理請求為止,避免請求的發送者和接收者之間的耦合關系。
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內置支持這種模式,所以一般來說,不用自己寫,
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(); |
類圖: