java中的闭包和回调(二)

TeachableProgrammer类:

[java] view plaincopy
 
  1. package com.home;  
  2.   
  3. public class TeachableProgrammer extends Programmer {  
  4.   
  5.     public TeachableProgrammer() {  
  6.         super();  
  7.     }  
  8.   
  9.     public TeachableProgrammer(String name) {  
  10.         super(name);  
  11.     }  
  12.   
  13.     // 教学工作任然由TeachableProgrammer定义  
  14.     private void teach() {  
  15.         System.out.println(getName() + "正在讲课");  
  16.     }  
  17.   
  18.     private class Closure implements Teachable {  
  19.   
  20.         @Override  
  21.         public void work() {  
  22.             // 非静态内部类实现Teachable的work方法,作用仅仅是向客户类提供一个回调外部类的途径  
  23.             teach();  
  24.         }  
  25.     }  
  26.   
  27.     // 返回一个非静态内部类的引用,允许外部类通过该引用来回调外部类的方法  
  28.     public Teachable getCallbackReference() {  
  29.         return new Closure();  
  30.     }  
  31. }  

TestClosure测试类:

[java] view plaincopy
 
  1. package com.home;  
  2.   
  3. public class TestClosure {  
  4.   
  5.     public static void main(String[] args) {  
  6.         TeachableProgrammer tp = new TeachableProgrammer("李刚");// 该示例来源于李刚老师的疯狂讲义  
  7.         // 直接调用TeachableProgrammer从Programmer类继承下来的work方法  
  8.         tp.work();  
  9.         // 表明上看是调用的Closure的work方法,实际上是通过通过work方法回调TeachableProgrammer的teach方法  
  10.         tp.getCallbackReference().work();  
  11.     }  
  12.   
  13. }  

posted on 2017-09-06 21:34  1130136248  阅读(115)  评论(0)    收藏  举报

导航