写优雅代码之聊一聊接口

一.常量接口

定义:用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.为了使我们写的项目接近完美,就把一部分功能外包给别人,让别人个性化定制,至于别人怎么实现不管,我唯一要做的就是定义好相关接口,这一设计允许了底层代码调用高层定义的方法,增强程序灵活性.


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值