本文实例讲述了Python设计模式之中介模式。分享给大家供大家参考,具体如下:
Mediator Pattern:中介模式
中介模式提供了一系列统一的系统接口。此模式也被认为是行为模式,因为他能选择程序处理流程。
当许多类开始在交互中产生结果时,可以选用中介模式。当软件开始组织的时候,许多用户的要求添加更多的功能。
这就导致了要和以前的类不断交互,除了新类。随着系统的复杂度加大,类之间的交互变得频繁,维护代码变得困难。
中介模式 就是为了解决这个问题,通过允许类之间的松耦合。这样中介模式就能了解系统中所有类的功能。类的功能就是与中介类进行交互。当类与类之间需要交互的时候,类就发送信息给中介,中介就转发信息给被请求的类。通过这样,类与类之间的复杂度就减少了。
一个简单的中介模式例子:
一个类型的中介模式例子可以在测试自动框架(包含4个类,TC,TestManager,Reporter ,DB)中被证明。
1.TC类是测试的响应,借助方法setup(),execute(),tearDown()。
2.Reporter类调用
当测试分类开始执行时,调用prepare方法。
当测试分类完成执行时,调用report()方法 ,
框架的测试响应就是好的帮助文档。
我也没弄懂中介模式,让人犯晕!
代码贴出来:
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
|
import time
class TC:
def __init__( self ):
self ._tm = tm
self ._bProblem = 0
def setup( self ):
print "Setting up the Test"
time.sleep( 1 )
self ._tm.prepareReporting()
def execute( self ):
if not self ._bProblem:
print "Executing the test"
time.sleep( 1 )
else :
print "Problem in setup,Test not executed."
def tearDown( self ):
if not self ._bProblem:
print "Tearing down"
time.sleep( 1 )
self ._tm.publishReport()
else :
print "Test not executed.No tear down required."
def setTM( self , TM):
self ._tm = tm
def setProblem( self , value):
self ._bProblem = value
class Reporter:
def __init__( self ):
self ._tm = None
def prepare( self ):
print "Reporter Class is preparing to report the results"
time.sleep( 1 )
def report( self ):
print "Reporting the results of Test"
time.sleep( 1 )
def setTM( self , TM):
self ._tm = tm
class DB:
def __init__( self ):
self ._tm = None
def insert( self ):
print "Inserting the execution begin status in the Database"
time.sleep( 1 )
import random
if random.randrange( 1 , 4 ) = = 3 :
return - 1
def update( self ):
print "Updating the test results in Database"
time.sleep( 1 )
def setTM( self , TM):
self ._tm = tm
class TestManager:
def __init__( self ):
self ._reporter = None
self ._db = None
self ._tc = None
def prepareReporting( self ):
rvalue = self ._db.insert()
if rvalue = = - 1 :
self ._tc.setProblem( 1 )
self ._reporter.prepare()
def setReporter( self , reporter):
self ._reporter = reporter
def setDB( self , db):
self ._db = db
def publishReport( self ):
self ._db.update()
rvalue = self ._reporter.report()
def setTC( self , tc):
self ._tc = tc
if __name__ = = '__main__' :
reporter = Reporter()
db = DB()
tm = TestManager()
tm.setReporter(reporter)
tm.setDB(db)
reporter.setTM(tm)
db.setTM(tm)
while ( 1 ):
tc = TC()
tc.setTM(tm)
tm.setTC(tc)
tc.setup()
tc.execute()
tc.tearDown()
|
运行结果:
希望本文所述对大家Python程序设计有所帮助。
原文链接:http://www.cnblogs.com/lizhitai/p/4468178.html