一.常量接口
定义:用java接口来申明一些常量,然后由实现这个接口的类使用这些常量.
运用场景:可以用在app的开发中,比如url,发送的交易上
实现步骤:
1.首先定义一个常量接口
package com.hxl.constant;
/**
* 只要是实现了这个接口的实现类,都可以继承这些常量
*
* @author skythinking 常量接口
*/
public interface AppConstants {
public static final int GOODSDETAILS = 30001;
public static final int EVALUATION = 30004;
/** 服务器 */
public static final String APPURL = "http://www.baidu.com/";
}
2.定义一个类实现这个接口,在实现类中就可以直接引用到这些常量
package com.hxl.constant;
/**
* 实现了AppConstants这个接口,就自动继承了它的常量
*
* @author skythinking
*
*/
public class AppConstantsImpl implements AppConstants {
/**
* 测试方法
*
* @param args
*/
public static void main(String[] args) {
System.out.println("打印在常量接口中定义的AppUrl常量:" + APPURL);
System.out.println(GOODSDETAILS);
}
}
运行结果
打印在常量接口中定义的AppUrl常量:http://www.baidu.com/
30001
二.回调接口
定义:用java接口来完成回调工作
运用场景:可以用在框架的设计中(比如该例中,老板让员工干活,但是老板没时间监督,就让员工做完事情通知他一声就成)
实现步骤:
1.定义一个用于回调的接口,并提供回调方法
package com.hxl.callback;
/**
* 回调的本质:通过接口变量持有实现类的引用,进而调用实现类的方法
*
* 此接口为留联系方式用(老板实现该接口,员工通过回调execute()方法,来通知老板干活情况)
*
* @author skythinking
*
*
*/
public interface CallBackInterface {
// 用这个方法作为老板留下的联系方式,通过回调该方法,可以通知到老板
public void execute();
}
2.老板类实现回调接口,并实现回调接口中定义的方法
package com.hxl.callback;
/**
* 老板是作为上层应用身份出现的,下层应用(员工)是不知道 有哪些方法, 因此他想被下层应用(员工)调用必须实现CallBackInterface接口
*
* @author skythinking
*
*/
public class Boss implements CallBackInterface {
@Override
public void execute() {
System.out.println("老板回答:好的,收到了!!");
}
}
3.员工类通过持有回调接口,并通过set方法注入老板类的实现,而持有老板类的引用,进而回调到老板类中实现的接口方法
package com.hxl.callback;
/**
* 员工类,必须要记住,这是一个底层类,底层是不了解上层服务的 ,他必须持有老板的地址(回调接口),即使老板换了一茬又一茬,办公室不变,总能找到对应的老板。
*
* @author skythinking
*
*/
public class Employee {
// 持有老板的地址(即老板对象的引用),这里是向上转型
private CallBackInterface callBack = null;
/**
* 通过set方法注入老板类的实例,进而持有它的引用(也就是注册)
*
* @param callBack
*/
public void setCallBack(CallBackInterface callBack) {
this.callBack = callBack;
}
// 工人干活
public void doSome() {
// 1.开始干活了
for (int i = 0; i < 10; i++) {
System.out.println("员工说:第【" + i + "】事情干完了!");
}
// 2.告诉老板干完了
/**
* (这里就是回调了接口的execute()方法
* 而老板实现了CallBackInterface接口,通过setCallBack(CallBackInterface
* callBack)注入进来的是老板类, 自然也就调用到老板类中的execute()方法
*/
if (callBack != null) {
callBack.execute();
} else {
System.out.println("没有通过setCallBack(CallBackInterface callBack)注入实现了CallBackInterface的实现类");
}
}
}
4.写测试类进行测试
package com.hxl.callback;
public class Test {
public static void main(String[] args) {
Employee emp = new Employee();
// 员工持有老板对象的引用(注册)
emp.setCallBack(new Boss());
// 开启控制器对象运行
emp.doSome();
}
}
运行结果:
员工说:第【0】事情干完了!
员工说:第【1】事情干完了!
员工说:第【2】事情干完了!
员工说:第【3】事情干完了!
员工说:第【4】事情干完了!
员工说:第【5】事情干完了!
员工说:第【6】事情干完了!
员工说:第【7】事情干完了!
员工说:第【8】事情干完了!
员工说:第【9】事情干完了!
老板回答:好的,收到了!!
接口回调扩展知识:
1.在我们用一些开源框架的时候,当框架不能满足需求,我们想让框架来调用自己的类方法,怎么做呢?
总不至于去修改框架吧.许多优秀的框架提几乎都供了相关的接口,我们只需要实现相关接口,即可完成了注册.
然后在合适的时候让框架来调用我们自己的类
2.为了使我们写的项目接近完美,就把一部分功能外包给别人,让别人个性化定制,至于别人怎么实现不管,我唯一要做的就是定义好相关接口,这一设计允许了底层代码调用高层定义的方法,增强程序灵活性.