• 第六篇、静态代理模式与Lamda表达式



    前言

    上一篇我们共同学习了以Callable接口的方式实现多线程,本篇我们来学习和类比多线程与代理模式的相似之处,以及学习Java8之后出现的lamda表达式。


    一、Lambad表达式和静态代理模式

    Lambad表达式的作用:

    1. 避免匿名内部类定义过多。
    2. lambad表达式属于函数式编程。
      代理模式:
    3. 代理模式其实就是通过一个类去代替另一个类去做一些操作。

    二、代码示例

    1.静态代理模式

    代码如下(示例):
    主类:StaticProxy类

    public class StaticProxy {
        public static void main(String[] args) {
            WeddingCompany weddingCompany = new WeddingCompany(new You());
            weddingCompany.HappyMarry();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    接口:Marry接口

    interface Marry{
        public void HappyMarry();
    }
    
    • 1
    • 2
    • 3

    真实类:You类

    class You implements Marry{
        @Override
        public void HappyMarry() {
            System.out.println("我要结婚了。");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    代理类:WeddingCompany类

    class WeddingCompany implements Marry{
        private Marry targe;
    
        public WeddingCompany(Marry targe) {
            this.targe = targe;
        }
    
        @Override
        public void HappyMarry() {
            before();
            targe.HappyMarry();
            after();
        }
        private void before() {
            System.out.println("结婚之前,布置现场");
        }
        private void after() {
            System.out.println("结婚之后,收份子钱");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    运行结果:
    在这里插入图片描述

    2.Lambad表达式

    代码如下(示例):

    Ilike接口

    //函数类接口
    interface ILike{
        void Lambda();
    }
    
    • 1
    • 2
    • 3
    • 4

    Like类

    //1.实现类
    class Like implements ILike{
        @Override
        public void Lambda() {
            System.out.println("i like lambda1");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    TestLambda01类

    public class TestLambda01 {
        //2.静态内部类
        static class Like1 implements ILike{
            @Override
            public void Lambda() {
                System.out.println("i like lambda2");
            }
        }
        public static void main(String[] args) {
            ILike like = new Like();
            like.Lambda();
    
            like = new Like1();
            like.Lambda();
    
            //3.局部内部类
            class Like2 implements ILike{
                @Override
                public void Lambda() {
                    System.out.println("i like lambda3");
                }
            }
    
            like = new Like2();
            like.Lambda();
    
            //4.匿名内部类,没有类的名字,必须借助接口或者父类。
            like = new ILike(){
                @Override
                public void Lambda() {
                    System.out.println("i like lambda4");
                }
            };
            like.Lambda();
    
            //5.lambda简化
            like = ()->{
                System.out.println("i like lambda5");
            };
            like.Lambda();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    运行结果:
    在这里插入图片描述


    总结

  • 相关阅读:
    第一章 人工智能专题之Python基础知识复习
    AI绘画开源王者归来,Stable Diffusion 3.5 AI绘画模型开源发布
    个人商城系统开源(发送邮箱验证码!)
    浅谈Android输入法(IME)架构
    SpringBoot的初始文件与类分析
    Python程序设计实战教程(持续学习中)
    『忘了再学』Shell基础 — 29、AWK内置变量
    记录报错_linux: su root 报错: su: Authentication failure
    Vue笔记(八)Vue3 新特性
    antd table给某些表头设置样式
  • 原文地址:https://blog.csdn.net/weixin_45796249/article/details/126927932