Java Design Demo -回调函数

本文详细介绍了回调函数的概念,包括其特性、工作流程以及如何在实际代码中使用回调函数进行任务监听。通过示例代码,展示了如何利用回调函数实现简单任务监听器,以及在不同场景下回调函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.  什么是回调函数 
    回调函数(callback Function),顾名思义,用于回调的函数。  回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。回调函数包含下面几个特性: 
    1、属于工作流的一个部分; 
    2、必须按照工作流指定的调用约定来申明(定义); 
    3、他的调用时机由工作流决定,回调函数的实现者不能直接调用回调函数来实现工作流的功能;     



精髓:由用户按照回调函数调用约定来实现的一个函数。


摘选自《Hibernate》回调函数的示例


interface CallBack{    
    public void doCRUD();    
}   
  
public class HibernateTemplate {    
       
    public void execute(CallBack action){   
        getConnection();   
        action.doCRUD();   
        releaseConnection();   
       
    }   
    
    public void add(){   
         execute(new CallBack(){   
            public void doCRUD(){   
                System.out.println("执行add操作...");   
            }   
         });   
    }   
       
    public void delete(){   
         execute(new CallBack(){   
            public void doCRUD(){   
                System.out.println("执行delete操作...");   
            }   
         });   
    }    
  
    public void getConnection(){   
        System.out.println("获得连接...");   
    }   
       
    public void releaseConnection(){   
        System.out.println("释放连接...");   
    }   
       
    public static  void main (String[] args)
    {
    	HibernateTemplate  ht=new HibernateTemplate();
    	ht.add();
    	ht.delete();
    }
    
}  



我们用回调函数写一个 简单 任务监听器    我在做一个任务,不知道要花多少时间,但是任务完成后一定会通知监听器。


import java.util.Random;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//监听器
		Task.Listen listen = new Task.Listen() {

			@Override
			public  synchronized boolean finsh(Task t) {
				// TODO Auto-generated method stub
				System.out.println(t.getName() + "任务完成");
				return false;
			}
		};
        //任务
		Task t = new Task() {

			@Override
			protected void dotask() {
				//.................do anything
				   System.out.println(this.getName()+"正在执行一个任务");
				   int x=new Random().nextInt(1000)+500;
				   try {
					    Thread.sleep(x);
				       } catch (InterruptedException e) {
					    // TODO Auto-generated catch block
					    e.printStackTrace();
				    }
				System.out.println("等待了"+x+"毫秒");
				
				//.................do anything
			}

		};
		t.setName("java");
		//设置监听器
		t.setListen(listen);
		Thread thread=new Thread(t);
		thread.start();
	}

}

abstract class Task implements Runnable {

	public interface Listen {
		boolean finsh(Task t);
	}

	public String name;
	public Listen listen;

	@Override
	public void run() {
		// TODO Auto-generated method stub
		//.................do anything
		dotask();
		//回调
		if (listen != null)
			listen.finsh(this);
	}

	protected abstract void dotask();

	public Listen getListen() {
		return listen;
	}

	public void setListen(Listen listen) {
		this.listen = listen;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值