美文网首页
关于回调的两个小栗子

关于回调的两个小栗子

作者: 尽心上 | 来源:发表于2016-06-29 17:16 被阅读12次

    搬运工

    例子1
        /** 
         * 这是一个回调接口 
         * @author xiaanming 
         * 
         */  
        public interface CallBack {  
            /** 
             * 这个是小李知道答案时要调用的函数告诉小王,也就是回调函数 
             * @param result 是答案 
             */  
            public void solve(String result);  
        }  
    
            /** 
         * 这个是小王 
         * @author xiaanming 
         * 实现了一个回调接口CallBack,相当于----->背景一 
         */  
        public class Wang implements CallBack {  
            /** 
             * 小李对象的引用 
             * 相当于----->背景二 
             */  
            private Li li;   
          
            /** 
             * 小王的构造方法,持有小李的引用 
             * @param li 
             */  
            public Wang(Li li){  
                this.li = li;  
            }  
              
            /** 
             * 小王通过这个方法去问小李的问题 
             * @param question  就是小王要问的问题,1 + 1 = ? 
             */  
            public void askQuestion(final String question){  
                //这里用一个线程就是异步,  
                new Thread(new Runnable() {  
                    @Override  
                    public void run() {  
                        /** 
                         * 小王调用小李中的方法,在这里注册回调接口 
                         * 这就相当于A类调用B的方法C 
                         */  
                        li.executeMessage(Wang.this, question);   
                    }  
                }).start();  
                  
                //小网问完问题挂掉电话就去干其他的事情了,诳街去了  
                play();  
            }  
          
            public void play(){  
                System.out.println("我要逛街去了");  
            }  
          
            /** 
             * 小李知道答案后调用此方法告诉小王,就是所谓的小王的回调方法 
             */  
            @Override  
            public void solve(String result) {  
                System.out.println("小李告诉小王的答案是--->" + result);  
            }  
              
        }  
    
            /** 
         * 这个就是小李啦 
         * @author xiaanming 
         * 
         */  
        public class Li {  
            /** 
             * 相当于B类有参数为CallBack callBack的f()---->背景三 
             * @param callBack   
             * @param question  小王问的问题 
             */  
            public void executeMessage(CallBack callBack, String question){  
                System.out.println("小王问的问题--->" + question);  
                  
                //模拟小李办自己的事情需要很长时间  
                for(int i=0; i<10000;i++){  
                      
                }  
                  
                /** 
                 * 小李办完自己的事情之后想到了答案是2 
                 */  
                String result = "答案是2";  
                  
                /** 
                 * 于是就打电话告诉小王,调用小王中的方法 
                 * 这就相当于B类反过来调用A的方法D 
                 */  
                callBack.solve(result);   
          
                  
                  
            }  
              
        } 
    
            /** 
         * 测试类 
         * @author xiaanming 
         * 
         */  
        public class Test {  
            public static void main(String[]args){  
                /** 
                 * new 一个小李 
                 */  
                Li li = new Li();  
          
                /** 
                 * new 一个小王 
                 */  
                Wang wang = new Wang(li);  
                  
                /** 
                 * 小王问小李问题 
                 */  
                wang.askQuestion("1 + 1 = ?");  
            }  
        }   
    
    例子2
    /**
     * 与中国电信合作的sp实现此接口即可
     * 这个就是Callback接口
     * @author wanghe
     *
     */
    public interface ServiceProvider {
        /**
         * sp可以自定义提示
         */
        public void customHint();
    }
    
    一个ChinaTelecom类,即class B;
    
    /**
     * 中国电信
     * @author wanghe
     *
     */
    public class ChinaTelecom {
        private ServiceProvider sp;//callback接口作为属性
    
        public void setSp(ServiceProvider sp) {
            this.sp = sp;
        }
        
        /**
         * 初始化
         */
        public void init(){
            System.out.println("Welcome, This is ChinaTelecom! ");
            sp.customHint();//sp自定义的操作
        }
    }
    
    一个KongNet类,即 class   A
    
    /**
     * 服务提供商(SP)--空中网 
     * @author wanghe
     *
     */
    public class KongNet implements ServiceProvider{
    
        public void customHint() {
            System.out.println("优惠活动开始啦,即日起登陆空中网就有好礼送! 详情见网站公告。");
        }
    
        public void init(){
            ChinaTelecom ct=new ChinaTelecom();
            ct.setSp(new KongNet());//告诉ChinaTelecom这是哪家sp
            ct.init();
        }
        
        public static void main(String[] args){
            KongNet sp = new KongNet();
            sp.init();
        }
    }
    

    相关文章

      网友评论

          本文标题:关于回调的两个小栗子

          本文链接:https://www.haomeiwen.com/subject/kqjxjttx.html