静态代理
我们以结婚为案例,你是一个真实的对象,婚庆公司代理你结婚,所以婚庆公司是一个代理对象。你和婚庆公司都需要实现结婚这个功能。我们用代码来实现
public class Test1 {
public static void main(String[] args) {
WeddingCompy weddingCompy = new WeddingCompy(new You());
weddingCompy.marry();
}
}
interface Marry{
void marry();
}
class You implements Marry{
@Override
public void marry() {
System.out.println("你开心的结婚");
}
}
class WeddingCompy implements Marry{
private Marry target;
public WeddingCompy(Marry target) {
this.target = target;
}
@Override
public void marry() {
before();
this.target.marry();
after();
}
public void before(){
System.out.println("结婚之前");
}
public void after(){
System.out.println("结婚之后");
}
}
静态代理中,真实对象和代理对象都要实现同一个接口
代理对象要代理真实角色,我们不通过真实对象调用方法,而是通过代理对象调用了真实对象的Marry()方法
Lamda表达式
格式:
new Thread(()->{
线程执行体;
});
好处:
- 避免匿名内部类定义过多
- 代码看起来比较简洁
- 去掉无意义代码,只留下核心部分
注意:使用Lamda表达式必须要是一个函数式接口,函数式接口指的是只有一个抽象方法的接口。
推导:
public class Test2 {
//静态内部类
static class Like2 implements ILike{
@Override
public void lamda() {
System.out.println("lamda2");
}
}
public static void main(String[] args) {
Like like = new Like();
like.lamda();
Like2 like2 = new Like2();
like2.lamda();
//局部内部类
class Like3 implements ILike{
@Override
public void lamda() {
System.out.println("lamda3");
}
}
Like3 like3 = new Like3();
like3.lamda();
//匿名内部类
ILike Like = new ILike() {
@Override
public void lamda() {
System.out.println("lamda4");
}
};
Like.lamda();
//lamda表达式
Like = ()->{
System.out.println("lamda5");
};
Like.lamda();
}
}
//函数式接口
interface ILike{
void lamda();
}
//实现类
class Like implements ILike{
@Override
public void lamda() {
System.out.println("lamda1");
}
}