责任链模式:将能处理请求的对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理请求为止,避免请求的发送者和接收者之间的耦合关系。
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(); |
类图: