最近在做一个蓝牙稳定性的自动化测试工具,就是用app模拟人的行为,自动去跑一些蓝牙相关的测试用例,譬如间隔传输数据、传输大数据、反复开关蓝牙等,再加上不同的参数配置,一共加起来大概有30多个case要跑,并且需要这些case串行执行,就是一个case跑完了才能执行下一个。这个时候如果没有一个设计框架在里面,直接硬编码实现每一个case会无比混乱,尤其是想实现串行执行会很麻烦。所以搞了一套框架,主要使用了模版方法模式、责任链模式这两个设计模式.
1.模版方法模式:
我们将每个测试用例抽象成一个Task, 下面Task的超类,这里面我们可以看到,Task有onStart、onExecute 、onStop三个生命周期方法,其中onExecute可能会被多次调用,因为一个用例可能会被多次执行。同时与三个生命周期方法想对应的是三个控制方法,start execute stop.以前我还对这种设计的好处不是很有体会,但这次在自己使用过程中,确实发现了这种方式对于子类执行流程控制的绝大好处。
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
38public abstract class BasicTask { private BasicTask mNext;// 该task的下一个要要执行task protected void onStart() { } protected void onExecute() { } protected void onStop() { } public void start(TaskStateListener listener) { onStart(); } protected void execute() { if (!isStop) { if (!isConnected()) { isDisConnectedWhenExecute = true; EventBus.getDefault().post("连接暂未建立,先建立连接"); buildConnect(); } else { onExecute(); } } } public void stop() { onStop(); // 下面逻辑最好放在stop里面,因为basic的onStopp有可能在其子类的onStop之前被调用,super.onStop(); if (mNext != null) { mNext.start(mTaskStateListener); } else { mTaskStateListener.onAllTaskComplete(); } } }
2.责任链模式:
private BasicTask mNext;// 该task的下一个要要执行task
每个task都持有下一个要执行的task的引用,这样就可以以链式的方式控制整个链条的执行了,让执行流程清晰了很多,不需要在中心总控task的切换了。这符合面向对象编程的原则,谁有数据谁触发。
最后
以上就是鳗鱼日记本最近收集整理的关于关于两个设计模式的心得----模版方法模式、责任链模式的全部内容,更多相关关于两个设计模式内容请搜索靠谱客的其他文章。
发表评论 取消回复