我是靠谱客的博主 鳗鱼日记本,最近开发中收集的这篇文章主要介绍关于两个设计模式的心得----模版方法模式、责任链模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

       最近在做一个蓝牙稳定性的自动化测试工具,就是用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的切换了。这符合面向对象编程的原则,谁有数据谁触发。

   

最后

以上就是鳗鱼日记本为你收集整理的关于两个设计模式的心得----模版方法模式、责任链模式的全部内容,希望文章能够帮你解决关于两个设计模式的心得----模版方法模式、责任链模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部