文章目录

Day 21

2019年6月1日。
这是我学习Java的第二十一天。
这一天,我学到了以下的知识。

静态代理

静态代理,是一种设计模式。
静态代理的实现比较简单,代理类通过实现与目标对象相同的接口,并在类中维护一个代理对象。通过构造器塞入目标对象,赋值给代理对象,进而执行代理对象实现的接口方法,并实现前拦截,后拦截等所需的业务功能。
以下面为示例:

  • 你(RealSubject):真实角色
  • 婚庆公司(Proxy):代理角色,代理你,帮你处理结婚的事
  • 结婚(Subject):接口,实现结婚接口即可
//静态代理
public class StaticProxy {
public static void main(String[] args) {
//代理对象 代理 真实对象
You you = new You();
new WeddingCompany(you).happyMarry();
}
}

//真实对象:你
class You implements Marry{

@Override
public void happyMarry() {
System.out.println("b");
}
}

//代理对象:婚庆公司
class WeddingCompany implements Marry{

//核心:婚庆需要有你这个人,代理对象需要代理一个真实对象
private Marry you;

public WeddingCompany(Marry you) {
this.you = you;
}

@Override
public void happyMarry() {
before();
this.you.happyMarry();
after();
}

private void before() {
System.out.println("a");
}

private void after() {
System.out.println("c");
}
}

//共同的接口:结婚
interface Marry{
void happyMarry();
}

Lambda表达式

Lambda表达式,是一个匿名函数。Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。

Lambda表达式是jdk8新增的概念,必须用在函数式接口上(接口中只有一个抽象方法),是匿名内部类的转化形式,需要有返回值来让JVM辨认是哪个接口。若只传递一个参数,还可以简化参数类型和括号。若方法体只有一行,则可以省略花括号。

Lambda格式如下:

Java学习记录 Day21(静态代理、Lambda表达式)_静态代理


范例如下:

public class LambdaTest {
public static void main(String[] args) {
//实现方式1:匿名内部类
ILove iLove = new ILove() {
@Override
public void Love(int a) {
System.out.println(a);
}
};
iLove.Love(1);
//实现方式2:Lambda表达式完整格式
iLove =(int a) -> {
System.out.println("2");
};
iLove.Love(2);
//实现方式3:Lambda表达式缩减格式(省略变量类型)
iLove = a -> {
System.out.println("3");
};
iLove.Love(3);
//实现方式4:Lambda表达式缩减格式(省略变量类型、花括号)
iLove = a -> System.out.println("4");
iLove.Love(4);
}


}

//函数式接口,只有一个方法
interface ILove{
void Love(int a);
}