静态代理
原理思想
- 代理类和真实类,都实现同一个接口中的方法
- 代理类调用真实类的方法
- 调用代理类的方法,就是调用真实类的方法
就像你(Bridegroom真实类)要结婚,找到婚庆公司(Wedding代理类)为你处理结婚(marry方法)这件事(全都实现Marry的marry方法).但是本质还是你自己进行的(target.marry).
人生四大喜事
久旱逢甘霖,他乡遇故交.洞房花烛夜,金榜题名时.
Marry接口
package com.li.changGe.multithreading.staticProxy;
public interface Marry {
void marry();
}
Wedding代理类
package com.li.changGe.multithreading.staticProxy;
public class Wedding implements Marry{
private Marry target;
public Wedding(Marry target){
this.target = target;
}
@Override
public void marry() {
target.marry();
}
}
Bridegroom真实类
package com.li.changGe.multithreading.staticProxy;
public class Bridegroom implements Marry{
private String name;
public Bridegroom(String name){
this.name = name;
}
/**
* 人生四大喜事
* 久旱逢甘霖,他乡遇故交.洞房花烛夜,金榜题名时.
*/
@Override
public void marry() {
System.out.println(name+"结婚了");
}
}
测试类
package com.li.changGe.multithreading.staticProxy;
public class StaticProxyDemo01{
/**
* 代理类和真实类,都实现同一个接口中的方法
*
* 代理类调用真实类的方法
*
* 调用代理类的方法,就是调用真实类的方法
*/
public static void main(String[] args) {
new Wedding(new Bridegroom("十月")).marry();
}
}
Lambda表达式
只有一个方法的接口(函数式接口)可以用lambda表达式精简代码
就是将实现匿名类时固定要写的代码删除后,在传参和方法体中间加上 -->
ctrl + shift + /:多选注释
package com.li.changGe.multithreading;
public class LambdaDemo01{
/**
* 只有一个方法的接口:函数式接口
*
* ctrl + shift + /:多选注释
*/
public static void main(String[] args) {
//Like like = arrays -> System.out.println(1);
Like like = arrays -> {
return arrays[1];
};
int love = like.love(12, 34);
System.out.println(love);//34
}
}
interface Like{
/*void*/int love(int...arrays);
}