JAVA设计方法思考之如何实现一个方法执行完毕后自动执行下一个方法
今天编程时,突然想起来在一些异步操作或Android原生库的时候,需要我们实现一些方法,
这些方法只需要我们具体实现,然后他们会在适当的时候,自动被调用!
例如AsyncTask,执行玩doInBackground()后会执行处理结果的postResult()方法,但我们并没有设置过他们的执行顺序。
以前只知道他们的运行原理,但不知道具体的实现方法,细想起来,这是一个相当不错的代码设计,所以决定研究一下。
因为一开始是通过实现方法来具体实现那些需要被执行的方法的,所以以为实现的方式是接口,
思索很久,依然没想到接口里面如何设置方法的运行顺序,搜索发现没有相关的结果,只好去看下AsyncTask的源码,希望从源码中得到答案!
而源码相当简洁有力,直接给出了我想要的答案:实现方法被调用的顺序控制,不是通过接口来实现的,而是通过抽象类!
而具体控制程序方法的调用顺序的实现,就是在固定的方法里控制:例如AsyncTask的execute(具体的实现过程可以自己在IDE里面轻松查看,就不去具体剖析了)
以下是本人模仿的示例代码,用于打印一个字符串数组的所有内容:
public class interface
{
public static void main(String[] args){
String[] b = {"a","b","c","d","e","f","g","h","i","j"};
new Order(b) {
@Override
protected String onFirst(String s) {
System.out.println(s);
return null;
} @Override
protected String onNext(String s) {
System.out.println(s);
return null;
} @Override
protected void onCompleted(String s) {
System.out.println(s);
}
}.start(); } } //具体实现方法顺序调用的抽象类
abstract class Order{ private String[] a;
private int i = 0; public Order(String[] s){
this.a = s;
} //这个抽象对象通过本方法启动,而控制程序方法调用的具体过程就是从这里开始
public String[] start(){ onFirst(a[i++]); executor(); return a; } public void executor(){
//最后一个需要在完成时执行,也可以让next方法执行完后再去执行Completed方法
while(i < a.length-2 && a[i] != null){
a[i++] = onNext(a[i]);
}
//返回字符串数组的最后一个元素内容
onCompleted(a[a.length-1]);
} //下面这三个方法就是用来在新建对象时实现的方法,而我只想实现方法按照顺序调用,就简单地给出对应顺序的字符串
//如果想要实现更复杂的功能,原理相同,具体问题具体分析 protected abstract String onFirst(String s); protected abstract String onNext(String s); protected abstract void onCompleted(String s); }
JAVA设计方法思考之如何实现一个方法执行完毕后自动执行下一个方法的更多相关文章
- JavaScript一个页面中有多个audio标签,其中一个播放结束后自动播放下一个,audio连续播放
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java主线程在子线程执行完毕后再执行
一.join() Thread中的join()方法就是同步,它使得线程之间由并行执行变为串行执行. public class MyJoinTest { public static void main( ...
- SNF快速开发平台MVC-审核流,审核完成后会给下一个审核人发邮件,下一个审核人可以不登录系统,在邮件里进行审核处理
审核流设计和使用参考以下资料: 审核流设计 http://www.cnblogs.com/spring_wang/p/4874531.html 审核流实例 http://www.cnblogs.com ...
- 解决Java线程池任务执行完毕后线程回收问题
转载请注明出处:http://www.cnblogs.com/pengineer/p/5011965.html 对于经常使用第三方框架进行web开发的程序员来说,Java线程池理所 ...
- 利用videojs自动播放下一个
利用videojs自动播放下一个 一.总结 一句话总结: 在视频放完的ended方法里面,指定video的src,然后this.play()放视频就好 vue来控制视频的链接也是蛮不错的 this.o ...
- [开发技巧]·HTML检测输入已完成自动填写下一个内容
[开发技巧]·HTML检测输入已完成自动填写下一个内容 个人网站 --> http://www.yansongsong.cn 在上一个博客中简易实现检测输入已完成,我们实现了检测输入已完成,现在 ...
- 解决批处理命令执行完毕后自动关闭cmd窗口方法
问题描述: 日常开发工作中,为了节省多余操作导致浪费时间,我们经常会自己建一些批处理脚本文件(xx.bat),文件中包含我们需要执行的命令,有时候我们希望执行完毕后看一下执行的结果,但是窗口执行完毕后 ...
- windows 10 删除库后自动恢复的解决方法
目录 什么是windows 库? 手动删除不行吗? 如何正确的"删除"? title: windows 10 删除库后自动恢复的解决方法 date: 2019-06-09 15:4 ...
- 用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat
用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat 摘自:https://zhidao.baidu.com/question/492732911.html @echo off ...
随机推荐
- 关于jeesite的陷阱需要注意
jeesite,其框架主要为: 后端 核心框架:Spring Framework 4.0 安全框架:Apache Shiro 1.2 视图框架:Spring MVC 4.0 服务端验证:Hiberna ...
- 使用QTP12.2录制windows applications,没有脚本产生
使用QTP12.2录制windows applications,没有脚本产生解决方案:关闭电脑的杀毒软件和安全卫士,再进行录制,所有步骤录制成功.录制QTP自带程序flight,选择windows a ...
- git 放弃本地修改,强制拉取更新
开发时,对于本地的项目中修改不做保存操作(或代码改崩),可以用到Git pull的强制覆盖,具体代码如下: git fetch --all git reset --hard origin/master ...
- GP中Geoprocessor.Execute(string name, IVariantArray parameters, ITrackCancel trackCancel)
在做一个项目的过程中,发现GP运算方法 Execute(string name, IVariantArray parameters, ITrackCancel trackCancel) 与Execut ...
- window7 修改docker安装的machine 位置
win7下安装docker ,默认的machine location 是在C:\users\xx\.docker\machine\machines 下面,为了不占用系统盘,想修改盘符位置 google ...
- SSO单点登录三种情况的实现方式详解
单点登录(SSO——Single Sign On)对于我们来说已经不陌生了.对于大型系统来说使用单点登录可以减少用户很多的麻烦.就拿百度来说吧,百度下面有很多的子系统——百度经验.百度知道.百度文库等 ...
- SpringCloudConfig配置中心git库以及refresh刷新
基于git库的Spring Cloud Config配置中心代码demo下载地址:https://gitlab.com/mySpringCloud/config-git SpringBoot版本: 1 ...
- spring @Configuration的使用
参考博客:https://www.cnblogs.com/duanxz/p/7493276.html spring中的@Scope注解 https://www.cnblogs.com/loneclo ...
- Ubuntu14.04安装 ROS 安装步骤和问题总结
参考: 1.http://wiki.ros.org/indigo/Installation/Ubuntu 2.安装出现依赖库问题: https://answers.ros.org/question/3 ...
- 忘记秘密利用python模拟登录暴力破解秘密
忘记秘密利用python模拟登录暴力破解秘密: #encoding=utf-8 import itertools import string import requests def gen_pwd_f ...