Java学习记录 Day21(静态代理、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{

    @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格式如下:
在这里插入图片描述
范例如下:

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);
}

猜你喜欢

转载自blog.csdn.net/qq_41151659/article/details/90756372