接口回调

接口回调
编辑

讨论

本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!

接口回调和上转型是设计模式的解耦核心,可以说几乎所有的模式都是建立在这两者的应用之上的。

中文名

接口回调

外文名

interface callback

目录

1
概述

2
实例

概述
编辑

接口回调其本质与上转型是一样的,不同的是:接口回调是用接口句柄来得到并调用实现这个接口的子类的引用;而上转型则是用父类句柄来得到并调用继承此父类的子类的引用。

实例
编辑

上面这段话看起来可能有点难以理解,那么下面以一段Java程序来作解释:
接口:
public interface Father{
public void fatherFunc();
}
下面三个类都实现了上述接口:
public class SonA implements Father{
@override
public void fatherFunc(){
… …//这里是SonA自己对接口方法的实现
}
}
public class SonB implements Father{
@override
public void fatherFunc(){
… …//这里是SonB自己对接口方法的实现
}
}
public class SonC implements Father{
@override
public void fatherFunc(){
… …//这里是SonC自己对接口方法的实现
}
}
三个类都实现了共同的接口Father,但是对其中的方法实现可能会有所不同。设想一下:在某段事务处理中需要用到接口Father提供的功能(在本例中只有一个方法fatherFunc),可是又无法确定具体是需要哪个子类实现的fatherFunc方法,那么可以直接在事务中声明接口Father的句柄,不用实例化。等到事务运行的时候再自动确定。看下面这段代码:
public class Deal{
public void doSth(Father father){
father.fatherFunc();//此步骤需要用到接口Father的功能
… …//处理其他事务
}
}
类Deal中用到了接口Father的功能,但是在定义时无法确定是哪一个实现Father的子类,直接使用了接口Father的句柄“Father father”,然后调用father的方法fatherFunc来处理,具体运行是再根据实例化对象调用相应的实现方法:
public static void main(String[] args){
Deal deal = new Deal();
Father fatherA = new SonA();
Father fatherB = new SonB();
Father fatherC = new SonC();
deal.doSth(fatherA);//调用的是SonA对接口的实现
deal.doSth(fatherB);//调用的是SonB对接口的实现
deal.doSth(fatherC);//调用的是SonC对接口的实现
}
这就达到了具体实现与事务处理的解耦。在类Deal处理事务过程中不需要知道实现接口的子类,这样可以方便的扩充和维护代码,即设计模式的开闭原则(对扩展开放,对修改关闭)。上面的代码中,fatherA、fatherB、fatherC都可以称为接口回调对象,它们虽然被声明为接口Father类型,但是在实例化时却是实现的某个子类。
上转型和它类似,设计模式就是基于此种“解耦”方法来产生的各种不同应用结构。
类型对象的可比较涉及到接口回调的另一个例子:
一旦JAVA类实现了Comparable接口,其比较逻辑就已经确定;如果希望在排序操作中临时指定比较规则,可以采用Comparator 接口回调的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值