织梦淘客网站香港旺道旺国际集团
文章目录
- Day 21
- 静态代理
- Lambda表达式
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{@Overridepublic void happyMarry() {System.out.println("b");}
}//代理对象:婚庆公司
class WeddingCompany implements Marry{//核心:婚庆需要有你这个人,代理对象需要代理一个真实对象private Marry you;public WeddingCompany(Marry you) {this.you = you;}@Overridepublic 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格式如下:
范例如下:
public class LambdaTest {public static void main(String[] args) {//实现方式1:匿名内部类ILove iLove = new ILove() {@Overridepublic 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);
}