Java回调的一个实例

本文通过三国故事生动地介绍了Java回调机制的应用。诸葛亮预先设定好战斗策略(回调接口),关羽和张飞依据战场情况(条件判断)适时执行(调用接口方法)。文章还提供了完整的代码示例。

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

    本人最近玩三国,就以三国里面的事例作为这个Java回调机制实例的背景。

        话说,魏军来犯,刘备慌乱不已,幸好诸葛孔明出马,派出关羽张飞二人前去迎敌,临行前各交付锦囊一个予二人,吩咐两人按锦囊行事,两人依计行事,一个火攻,一个水淹,打败魏军。

        这与回调有啥子关系呢?先讲讲啥米是回调吧:回调就是A定义处理逻辑,然后把控制权交由B(通过接口的方式,题外话,在C中是通过函数指针),等B在合适的时候调用之。联系到这个实例就是:诸葛孔明这书生上不了战场,但是脑子灵光,能制定有效的战斗策略(就是在啥米时候,啥米地方使用相应合适的战法)。而关张二人打仗猛,他们了解了诸葛村夫的作战计划,只要时机成熟,就执行之,那么就破敌在望。

        闲话少讲,上代码:

1、声明接口(声明要执行的动作--进攻)

public interface Attackable 
{
	public void attack();
}
2、实现接口
第一个作战计划--火攻
public class Package1 implements Attackable
{
	public void attack() 
	{
		System.out.println("火攻");
	}
}
第二个作战计划--水淹
public class Package2 implements Attackable
{
	public void attack() 
	{
		System.out.println("水淹");
	}
}

3、定义执行者(定义两队人马的头头要干嘛)

public class Team1Leader 
{
	public String name;
	public String position;
	Attackable attack;
	
	Team1Leader(String name,Attackable attack)
	{
		position = "";
		this.name = name;
		this.attack = attack;
	}
	
	void action() 
	{
		if(position.equalsIgnoreCase("树林"))
			attack.attack();
	}
}

public class Team2Leader 
{
	public String name;
	public String position;
	Attackable attack;
	
	Team2Leader(String name,Attackable attack)
	{
		position = "";
		this.name = name;
		this.attack = attack;
	}

	void action() 
	{
		if(position.equalsIgnoreCase("河边"))
			attack.attack();
	}
}
 
4、委托(孔明调兵遣将)
public class KongMing 
{
	public static  Team1Leader sheduleTeam1Leader()
	{
		return new Team1Leader("关羽",new Package1());
	}
	
	public static  Team2Leader sheduleTeam2Leader()
	{
		return new Team2Leader("张飞",new Package2());
	}
}
 
5、主方法呗
public class Main 
{
	public static void main(String[] args) 
	{

	
		Team1Leader leader1 = KongMing.sheduleTeam1Leader();
		Team2Leader leader2 = KongMing.sheduleTeam2Leader();
		
		System.out.println("当未到达树林...");
		leader1.action();
		leader1.position = "树林";
		System.out.print("当到达树林," + leader1.name);
		leader1.action();
		
		System.out.println("当未到达河边...");
		leader2.action();
		leader2.position = "河边";
		System.out.print("当到达河边," + leader2.name);
		leader2.action();
		
	}
}
 
    有同学可能会问,不用回调那么情况会点样呢......
    那么通常使用的方法是轮询,也就是诸葛同学就只能马不停蹄的去两边问问关张二人就位没有,直到两人就位又或者是被关张砍个半死^_^。
    其实回调通常的编写习惯都是这样的:
new Team3Leader("赵云",new Attackable()
	{
		public void attack() 
		{
			System.out.println("落石");
		}
	});
     所以当大家看到这些比较诡异的语句时候,通常就是回调出来作怪了。   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值