概述
最近在做一个蓝牙稳定性的自动化测试工具,就是用app模拟人的行为,自动去跑一些蓝牙相关的测试用例,譬如间隔传输数据、传输大数据、反复开关蓝牙等,再加上不同的参数配置,一共加起来大概有30多个case要跑,并且需要这些case串行执行,就是一个case跑完了才能执行下一个。这个时候如果没有一个设计框架在里面,直接硬编码实现每一个case会无比混乱,尤其是想实现串行执行会很麻烦。所以搞了一套框架,主要使用了模版方法模式、责任链模式这两个设计模式.
1.模版方法模式:
我们将每个测试用例抽象成一个Task, 下面Task的超类,这里面我们可以看到,Task有onStart、onExecute 、onStop三个生命周期方法,其中onExecute可能会被多次调用,因为一个用例可能会被多次执行。同时与三个生命周期方法想对应的是三个控制方法,start execute stop.以前我还对这种设计的好处不是很有体会,但这次在自己使用过程中,确实发现了这种方式对于子类执行流程控制的绝大好处。
public 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();
}
}
}
首先onStart、onExecute 、onStop一般都会被子类重写,执行自己的逻辑。但是这样我们就没法统一在超类里面实现方法拦截了,比如判断连接没有建立的时候,终止生命周期,这种需求我们是没法实现的,因为超类方法都被具体子类重写了。所以这时start execute stop这些方法就派上用场了,我们通过调用start来间接调用onStart,这样我们就可以在start里面进行条件判断从而控制生命周期了。
2.责任链模式:
private BasicTask mNext;// 该task的下一个要要执行task
每个task都持有下一个要执行的task的引用,这样就可以以链式的方式控制整个链条的执行了,让执行流程清晰了很多,不需要在中心总控task的切换了。这符合面向对象编程的原则,谁有数据谁触发。
最后
以上就是鳗鱼日记本为你收集整理的关于两个设计模式的心得----模版方法模式、责任链模式的全部内容,希望文章能够帮你解决关于两个设计模式的心得----模版方法模式、责任链模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复