好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java回调函数原理实例与代理模式的区别讲解

java 回调函数例子,及其原理,与代理模式的区别

回调函数

应用程序(application program)会时常通过api调用库里所预先备好的函数。但是有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数(callback function)。

作用: 可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。

例子

一个计算函数运行时间的工具类,正常方法

?

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

/**

  * @auther: cpb

  * @date: 2019/1/17 16:32

  * @description:

  */

public class runningtime {

   /**

    * 一个用来被测试的方法,进行了一个比较耗时的循环

    */

   public   static   void testmethod(){

     for ( int i= 0 ; i< 100000000 ; i++){

     }

   }

   /**

    * 一个简单的测试方法执行时间的方法

    */

   public void testtime(){

     long begin = system.currenttimemillis(); //测试起始时间

     testmethod(); //测试方法

     long end = system.currenttimemillis(); //测试结束时间

     system.out.println( "[use time]:" + (end - begin)); //打印使用时间

   }

   public static void main(string[] args) {

     runningtime test= new runningtime();

     test.testtime();

   }

}

创建回调函数接口

?

1

2

3

4

public interface callback {

   //执行回调操作的方法

   void execute();

}

回调函数

?

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

/**

  * @auther: cpb

  * @date: 2019/1/17 16:35

  * @description:

  */

public class tools {

   /**

    * 测试函数使用时间,通过定义callback接口的execute方法

    * @param callback

    */

   public   void testtime(callback callback) {

     long begin = system.currenttimemillis(); //测试起始时间

     callback.execute(); ///进行回调操作

     long end = system.currenttimemillis(); //测试结束时间

     system.out.println( "[use time]:" + (end - begin)); //打印使用时间

   }

   public   static   void main(string[] args) {

     tools tool = new tools();

     tool.testtime( new callback(){

       //定义execute方法

       public   void execute(){

         //这里可以加放一个或多个要测试运行时间的方法

         runningtime.testmethod();

       }

     });

   }

}

为什么叫回调函数

我们观看一下程序运行的流程,tools->callbacks->tools,顾为回调函数。

代理模式

?

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

38

39

40

41

42

43

44

45

46

//接口

public interface callback {

   //执行回调操作的方法

   void execute();

}

//实现类

public class mycallback implements callback{

   @override

   public void execute() {

     mycallback.testmethod();

   }

   public   static   void testmethod(){

     for ( int i= 0 ; i< 100000000 ; i++){

     }

   }

}

//代理类

public class proxy implements callback {

   private callback callback;

   public proxy(callback callback){

     this .callback = callback;

   }

   @override

   public void execute() {

     callback.execute();

   }

}

//调用方法类

public class tools {

   /**

    * 测试函数使用时间,通过定义callback接口的execute方法

    * @param callback

    */

   public   void testtime(callback callback) {

     long begin = system.currenttimemillis(); //测试起始时间

     callback.execute(); ///进行回调操作

     long end = system.currenttimemillis(); //测试结束时间

     system.out.println( "[use time]:" + (end - begin)); //打印使用时间

   }

   public   static   void main(string[] args) {

     tools tool = new tools();

     //让代理去实现方法去调用方法

     proxy proxy = new proxy( new mycallback());

     tool.testtime(proxy);

   }

}

代理模式和回调函数的区别

代理模式需要创建接口实现类,并放入代理类中,隔离性更好,扩展性好 回调函数不需要创建接口实现类,编写方便。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接

原文链接:https://blog.csdn.net/c_royi/article/details/86528158

查看更多关于Java回调函数原理实例与代理模式的区别讲解的详细内容...

  阅读:13次