学习(静态代理,lambda表达式)

Java学习—静态代理,lambda表达式

静态代理

所谓代理,就是指某人或某个组织替你做某事,这年头常见的中介,包括房介,车介,婚介等等,都是代理,***而在Java当中,代理分为两种方法,一种是静态代理,另一种是动态代理。***本节学习静态代理。在Java中,静态代理多用于多线程,通过两个类同时实现一个接口,从而在一个类的构造器当中调用另外一个类的对象,进而达到代理的目的

下面以婚介公司为例:

public class StaticProxy {
    public static void main(String[] args) {
        new Thread( ()-> System.out.println("结婚啦!")).start();
        new weddingFirm(new me()).HappyMarry();
    }
}
interface Marry{//该接口为结婚接口

    void HappyMarry();

}
//结婚者
class me implements Marry{
    @Override
    public void HappyMarry() {
        System.out.println("结婚了,超级开心!");

    }
}

//代理结婚的公司
class weddingFirm implements Marry{

    private Marry me;//这里是关键和精华!!!!!!!

    public weddingFirm(Marry me) {
        this.me = me;//这里通过构造器来获取对象
    }


    @Override
    public void HappyMarry() {
        before();//结婚前
        this.me.HappyMarry();
        after();//结婚后

    }

    private void after() {
        System.out.println("结婚之后,收尾款");
    }

    private void before() {
        System.out.println("结婚之前,布置现场");
    }
}

这个例子当中,先创建一个结婚的接口,随后让me和weddingFirm来实现这个接口,在weddingFirm当中,创建一个这个构造器

 private Marry me;//这里是关键和精华!!!!!!!

系统正是通过这个来进行代理,取得me的对象后就可以对其进行操作。这便是代理

最后,将me对象new出来并放入new的、出来的weddingFirm对象当中,调用HappyMarry方法即可完成代理。

提醒一句:本质上Thread类继承了Runnable接口,所以通过实现Runnable接口其实相当于是Thread类通过Runnable接口来对你所创建的类进行了静态代理。这也就和我们所学的知识扯上了关系。


lambda表达式

lambda表达式本质上是将实现函数式接口的过程进行简化,所谓函数式接口就是指只有一个方法的接口,例如Runnable接口就是一个典型的函数式接口。而Thread类又是继承了Runnable接口,所以创建一个线程对象可以用lambda表达式进行简化。

首先,如果要实现一个接口并重写其方法,我们最粗暴的办法就是直接在外面实现

interface Like{
    void lambda();
}
class Ilike implements Like{
    @Override
    public void lambda() {
        System.out.println("1");
    }

通过这种方式来对接口及逆行实现

我们可以进行优化,第一,我们可以将其放入内部类当中,这样可以让外面的类少一点。

第二,我们可以创建一个匿名内部类,这样就可以一次性使用,节约了空间和代码。

第三,我们就可以直接用lambda表达式

如下

public class Lambda {

    public static void main(String[] args) {
        Bird bird ;//可以用父类或者是接口来创造一个临时的对象

        bird=()->{
            System.out.println("我是鸟!");//这里通过临时的对象来重写接口的唯一方法,这样的简化就是lambda表达式
        };
        bird.fly();

        Love love;
        love=(times,name)->//lambda表达式可以简化参数类型和括号以及花括号,如果有多个参数,那么可以把每个参数类型都一起去掉
            //去参数,要么不去,要么全去掉.
            System.out.println("i love you "+times+" times!");

        love.love(3000,"小明");
    }
}
interface Bird{
    void fly();
interface Love{
    void love(int a ,String b);

lambda表达式的用法就是将一个需要实现接口的对象bird,这样初始化

bird=(这里是函数式接口的内部方法的参数)->{这里是内部方法的具体功能代码};

因此,其实静态代理的例子当中也将Thread类进行lambda表达式的简化

new Thread( ()-> System.out.println("结婚啦!")).start();

放这儿让大家细品。

其实lambda表达式和静态代理关系还蛮密切,大家可以放一块儿用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
lambda表达式是Python语言的一个特殊功能。它可以作为一种简便的写法,对于那些需要频繁使用函数,但又觉得定义函数过程过于麻烦和浪费时间的程序员来说,可以节省很多写代码的时间,并且提高程序的效率。lambda表达式也可以用于编写Python中的回调函数,可以使以前过程冗长的回调函数更加可读、简洁、明了。这些优点使得lambda表达式成为一个非常有用的、必须了解和学习的编程工具。 lambda表达式可以看做是一种简化版函数,并且比函数还要简单明了一些。lambda表达式通常作为快速编写处理小型数据集的函数的一种工具使用。通常将lambda表达式保存在变量中,这样就可以像常规函数一样调用它了。举一个例子,比如我要对一个列表中的数字进行平方操作: numbers = [1, 2, 3, 4, 5] squared_numbers = list(map(lambda x: x ** 2, numbers)) 可以看到,上面这个例子中使用了一个lambda表达式来定义一个简单的平方函数,并通过map函数应用到列表中的每个元素上。 了解了lambda表达式之后,我们还需要学习它的一些注意事项和规则。首先,lambda表达式只能有一个表达式,不能包含语句和注释。其次,lambda表达式的参数是可选的,但如果没有参数,那么必须在表达式的前面加上空的小括号。最后,lambda表达式一般用于一个简短的函数中,不应该定义复杂的函数。 综上所述,了解和学习lambda表达式是一项非常有用的技能,可以极大地提高编写Python代码的效率和准确性。尤其是在处理小型数据集时,使用lambda表达式可以节省很多时间和精力。但同样重要的是,我们需要注意lambda表达式的使用规则和注意事项,以确保程序的正确性和可读性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值