二什么是接口作为方法参数
用户人 基类 ,方法应用时候用到
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 用户人 基类
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Person {
/**
* 名字
*/
private String name;
/**
* 年龄
*/
private Integer age;
/**
* 语言
*/
private String lange;
}
/**
*说话接口
*/
public interface Speak {
void speackByLange(String name, String lange);
void speakNull();
}
参数为接口类型可以实现代码解耦;
对调用者而言,无需关心内部构造逻辑,只要实现调用相关方法实现自己的下部逻辑即可,做到开箱即用的效果;
工作类主要
import lombok.extern.slf4j.Slf4j;
/**
* 工作 处理用户做接口的关系处理 这里直接引用实体的name, lanage 在实际使用中
* 可以 有其他处理逻辑 如 加密解密,记录日志 , 以及转换算法 这里就简单处理了。。。
*/
@Slf4j
public class Work {
public void doOk(Person person, Speak speak) {
if (person != null) {
log.info('person:' + person.toString());
speak.speackByLange('(name)' + person.getName(), '(lange)' + person.getLange());
} else {
log.info('person is null');
speak.speakNull();
}
}
}
//重写抽象方法 ,然后具体做什么事情, 重写了两种方法, 一种是person不为空的情况
//另一种是person 为空的情况, 这样我们就封装了person和 speak的内部关系, 直接重写
//speack接口的方法, 来实现我们具体的需求
//在实际应用中,可能要重写 success方法和fail方法,这里只是简单重写一下
public class Test001 {
public static void main(String[] args) {
Person person = Person.builder().name('tom').age(12).lange('chinese').build();
Work work = new Work();
work.doOk(person, new DoSpeak() {
@Override
public void speackByLange(String name, String lange) {
System.out.println('名字:' + name + ' can speak ' + lange);
}
@Override
public void speakNull() {
System.out.println('speack is null ' );
}
});
}
抽象实现类
import lombok.extern.slf4j.Slf4j;
/**
* 说话抽象类
*/
@Slf4j
public abstract class DoSpeak implements Speak{
@Override
public void speackByLange(String name, String lange) {
log.info( name + 'do ' + lange);
}
@Override
public void speakNull() {
log.info('speck null ...');
}
}
我们翻看jdk源码发现大量这样应用的代码;
下面我们就举例实现说明
可以很方便封装起来,供调用者使用;
文章为作者独立观点,不代表股票交易接口观点