学了两三周的安卓了,最先开始是看mars老师的视频,看了一两天结合慕课网上的一些安卓视频,到现在算是有点入门了。
安卓立用得比较多的回调函数有点不明是怎么实现的,网上找了一些资料,结合自己的实践,总算有点明白了。
现在就把我自己对Java回调的理解写下来,以方便以后查阅。
比如我们执行一个方法的时候,Android系统就会帮我们调用oncreate()等方法,Android中有大量这样的情形。我们可以这样想,我们执行方法A的时候,系统
怎么就能够帮我们方法B了呢?这种肯定什么我们还没明白的地方。实际上很简单,只要我们在方法A里写上调用方法B,不就可以实现调用A的时候就自动调用B方
法了吗?下面我们就模拟这样一个场景,Jhno去打游戏的时候小明的妹妹Linda就会通知Dad说Jhon打游戏了。
先看目录结构:
先定义一个通知接口,interface ITongzhi,
package wyl.MoniAndroidCallback; /** * 谁要通知,谁就实现这个接口 * @author wyl * */ public interface ITongzhi { public void Tongzhi(); }
Linda.java
package wyl.MoniAndroidCallback; /** * linda要对弟弟进行举报,所以linda实现通知接口 * * @author wyl */ public class Linda implements ITongzhi { @Override public void Tongzhi() { System.out.println("Linda说:弟弟去打游戏了"); } }
PlayGame.java,
package wyl.MoniAndroidCallback; public class PlayGame { String name; ITongzhi tongzhizhe; /** * 打游戏的具体对象 * * @param name */ public PlayGame(String name) { this.name = name; } /** * 如果实例化的时候不传入具体是谁在打游戏, 那么打游戏的具体对象就默认为Jhon */ public PlayGame() { this.name = "Jhon"; } /** * 开始打游戏了,因为打游戏的时候就要通知, 所以在打游戏这个方法里我们就调用实习了 * ITongzhi这个接口的类的默认方法(这个默认方法即接口中定义的方法) */ public void Dayouxi() { System.out.println(this.name + "正在打游戏"); tongzhizhe = new Linda(); tongzhizhe.Tongzhi(); } }
Test.java ,测试类
package wyl.MoniAndroidCallback; /** * 测试类 * * @author wyl * */ public class Test { public static void main(String[] args) { /** * 两个不同的构造器构造出来的方法,可以作为对比 */ PlayGame p = new PlayGame("Tom"); PlayGame p2 = new PlayGame(); p.Dayouxi(); System.out.println("========================="); p2.Dayouxi(); } }
打印结果:
Tom正在打游戏 Linda说:弟弟去打游戏了 ========================= Jhon正在打游戏 Linda说:弟弟去打游戏了
实际上,Linda.java这个类,还可以进行改进,实现进一步的解耦。只要明白了这个例子,肯定就知道怎么进行解耦了。
时间: 2024-10-13 13:23:39