java多线程--2 静态代理、Lambda表达式

java多线程--2 静态代理、Lambda表达式

静态代理

package com.ssl.demo02;

//静态代理
//真实对象和代理对象都要实现同一个接口
//代理对象必须要代理真实角色

//好处
    //代理对象可以做很多真实对象做不了的事情
    //真实对象专注做自己的事情

public class StacticProxy {
    public static void main(String[] args) {

        You you = new You();

        //Lamda表达式
        new Thread(()-> System.out.println("我爱你")).start();

        new WeddingCompany(new You()).HappyMarry();

        /**相当于上面一行
        WeddingCompany weddingCompany = new WeddingCompany(new You());
        weddingCompany.HappyMarry();
         */
    }
}

interface  Marry{
    /**人间四大喜事
     * 久旱逢甘霖
     * 他乡遇故知
     * 洞房花烛夜
     * 金榜题名时
     */

    void HappyMarry();
}

//真实角色
class You implements Marry{
    @Override
    public void HappyMarry() {
        System.out.println("happy");
    }
}

//代理角色,帮You 结婚
class WeddingCompany implements Marry{
    //真实目标角色
    private Marry target;

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

    @Override
    public void HappyMarry() {
        before();
        this.target.HappyMarry();    //真实对象
        after();

    }

    private void after() {
        System.out.println("收尾款");
    }

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

}

Lamda表达式(JDK8新增)

  • 希腊字母表中的第十一个字母,英文名称为Lambda
  • 作用:
    • 避免匿名内部类太多
    • 可以让代码看起来更简洁
    • 去掉了一对没有意义的代码,只留下核心逻辑
  • 实质:属于函数式编程的概念
(params) ->expression[表达式]      a -> System.out.println("i like lambda-->"+a);
(params) ->statement[语句]
(params) ->{statements}

关键:

函数式接口:

  • 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
  • 对于函数式接口,我们可以通过lambda表达式来创建改接口的对象。

代码不断简化的过程 函数式接口

  • 实现类->静态内部类->局部内部类->匿名内部类->Lanbda实现

无参案例

package com.ssl.demo02;

public class TestLambda {

    //3.静态内部类
    static class Like2 implements ILike{
        @Override
        public void lambda() {
            System.out.println("I like lambda2");
        }
    }

    public static void main(String[] args) {

        //接口new了一个实现类
        ILike like = new Like();

        like.lambda();

        like = new Like2();

        like.lambda();

        //4.局部内部类
        class Like3 implements ILike{
            @Override
            public void lambda() {
                System.out.println("I like lambda3");
            }
        }

        like = new Like3();

        like.lambda();

        //5.匿名内部类,没有类的名称,必须借助接口或者父类
        like = new ILike() {
            @Override
            public void lambda() {
                System.out.println("I like lambda4");
            }
        };

        like.lambda();

        //6.Lambda简化 
        like = () -> System.out.println("I like lambda5");
        like.lambda();

    }
}

//1.定义一个函数式接口
interface  ILike{
    void lambda();
}

//2.实现类
class Like implements ILike{
    @Override
    public void lambda() {
        System.out.println("I like lambda");
    }
}

有参案例

package com.ssl.demo02;

public class TestLamvda2 {

    //3.静态内部类
    static class Love2 implements ILove{
        @Override
        public void love(int a) {
            System.out.println("I love2 "+a);
        }
    }

    public static void main(String[] args) {
        ILove love = new Love();
        love.love(1);

        love = new Love2();
        love.love(2);

        //4.局部内部类
        class Love3 implements ILove{
            @Override
            public void love(int a) {
                System.out.println("I love3 "+a);
            }
        }

        love = new Love3();
        love.love(3);

        //5.匿名内部类
        love = new ILove() {
            @Override
            public void love(int a) {
                System.out.println("I love4 "+a);
            }
        };
        love.love(4);

        //6.Lambda实现
        love = (a) -> System.out.println("I love5 "+a);
        love.love(5);

        love = a -> System.out.println("I love6 "+a);
        love.love(6);

        /**总结
         * 1.Lambda表达式只能有一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹。
         * 2.前提是接口为函数式接口
         * 3.多个参数可以去掉参数类型
         * 4.多个参数必须加括号
         */

    }

}

//1.定义接口
interface ILove{
    void love(int a);
}

//2.实现类
class Love implements ILove{
    @Override
    public void love(int a) {
        System.out.println("I love "+a);
    }
}
posted @ 2022-10-01 18:40  林每天都要努力  阅读(25)  评论(0)    收藏  举报