1. 概述

    1. 简单介绍 闭包

1. 聚合关系

  1. 概述

    1. 常见的 类间关系
  2. 场景

    1. 类 A

      1. 主要类
      2. 持有 类B 的实例
      3. 有点行为, 需要 类 B 的介入
    2. 类 B

      1. 有自己的行为
      2. A 会在某些时候调用 B 的行为
  3. 代码示例

    1. 伪代码

      class B:
      public void method1():
      actions; class A:
      private B b; public A(B b):
      this.b = b; public void m1():
      this.b.method1();
    2. 代码

      1. 伪代码有点坑
      2. 代码的话, 有机会会做补充

2. 换一个角度

  1. 概述

    1. 闭包
  2. 闭包

    1. 可以调用的对象
    2. 包含了作用域的信息
    3. 这玩意也不是什么类间关系
      1. 为啥把它和 聚合 放一块
  3. 场景

    1. 类 A

      1. 单一类
      2. 持有 类B 的实例
    2. 类 B

      1. 是 类A 的属性
      2. 是 A 的 内部类
      3. 实现了 接口I
    3. 接口I

      1. 被 B 实现
      2. 作为 引用对象, 接收 B 类实例
  4. 示例

    1. 伪代码

      interface I:
      void method1(); class A: class B implements I:
      public void method1():
      A.this.method1(); public void method1():
      actions public I getCallbackRef():
      return new B();
    2. 代码

      1. 有空再补
  5. tips

    1. 内部类

      1. 内部类持有 外部类 的一个引用

        1. 通过 OuterClass.this 来获取
    2. getCallBackRef

      1. 返回一个 I 类型的对象

        1. 实现方法
        2. 方便外面接收实例
      2. 实际返回的, 是 内部类 的实例

    3. 内部类的 method1

      1. 来自 I 的实现

      2. 实际行为

        1. 需要靠 A 来执行
    4. 然后一个类比

      1. 模型

        1. 类A 持有 类B
        2. 类A 的行为, 由 类B 来执行
      2. 聚合

        1. 符合这个模型
      3. 闭包

        1. 内部类的角度, 也符合这个模型
        2. 当然有点别扭
          1. 别扭的是, 内部类持有了 外部类 的引用
          2. 其实, 这个也不用奇怪
            1. 内部类 外部类 的关系, 和 聚合关系, 并没有直接的 可比性
            2. 当然, 只是相似
              1. 一个持有另一个
    5. 闭包

      1. 行为

        1. 得到一个 接口I 类型, 但实际为 内部类 的对象

          1. 当然, 这个接口, 也可以换成 抽象类
        2. 这个对象, 持有创建它的外部类
          1. 可以通过它, 暴露一些外部类的方法, 属性
          2. 可以通过这个持有, 保持外部类不被垃圾回收

3. 好了, 那闭包到底有什么用

  1. 多重继承

    1. java 的继承

      1. 正常情况下, 只能继承一个类
      2. 接口实现多个, 这个另说
    2. 多重继承

      1. 也不是真正意义上的多重继承

      2. 思路

        1. 约定

          1. 类 Outer

            1. 外部类
          2. 类 Inner
            1. 内部类
          3. 类 Abs1
            1. 抽象类1
          4. 类 Abs2
            1. 抽象类2
        2. 场景

          1. Outer 继承 Abs1
          2. Inner 继承 Abs2
          3. Inner 实现 Abs2 方法
            1. 实现的时候, 可以引入 Outer 对象来做操作
            2. 虽然不是真正的多重继承, 但实质上已经可以这么认为
          4. Outer 实现方法, 返回 Abs2 类型的对象
            1. 实际返回 Inner 类型的实例
          5. 其他使用者, 用 Abs2 类型的引用, 来接住这个实例

ps

  1. 类间关系

    1. ref

      1. 类和类之间的关系
    2. 关于 依赖 与 聚合
      1. 约定

        1. 类 A

          1. 主体类
        2. 类 B
          1. 被依赖
          2. 被聚合
      2. 依赖

        1. 重点

          1. A 的方法, 需要 B 来做参数

            1. 可能导致的结果, A 的行为, 会受到 B 影响
      3. 聚合

        1. 重点

          1. A 的属性, 是 B

            1. 可能导致的结果, A 的行为, 会受到 B 影响

              1. 怎么和上面一样...
      4. 区别

        1. 依赖

          1. 强调的关系, 没有聚合那么紧密
          2. 临时产生一个交集
            1. 交互完了关系立马消失
        2. 聚合
          1. 关系相对紧密, 整体 与 部分 的关系
          2. 关系较为稳定
            1. 整体存在, 关系一直都存在
  2. 内部类

    1. 这块暂时不细说

      1. Java 编程思想里, 有一章专门对这块做了详细的介绍
  3. 其他

    1. 类间关系, UML

      1. 这块其实, 还是挺有用的
    2. js 闭包

      1. 我第一见到闭包, 其实是 js
      2. 但是至今没有理解
    3. 伪代码

      1. 这块最好还是总结下吧

        1. 伪代码其实是 思路的体现

          1. 强调重点
        2. 与具体的语法独立
          1. 写起来方便
          2. 可以翻译成其他语言
        3. 我至今没有学太好
          1. 第一见到, 是偏向 py 的伪代码

            1. 但是 java 中的很多东西, py 不好表达
        4. 所以希望还是能学会这个东西
          1. 最好有足够强的表达能力
          2. 希望可以简单易懂
          3. 翻译起来, 不那么费劲

Java - 闭包的更多相关文章

  1. java 闭包与回调

    闭包(closure)是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域. 内部类是面向对象的闭包,因为它不仅包含外围类对象(创建内部类的作用域)的信息,还自动拥有一个指向此外围类对象 ...

  2. Java闭包和回调

    Java中的闭包与回调可以通过成员内部类来实现. 简单的来说闭包就是返回一个内部类对象,这个内部类对象包含了外部类对象的信息(因为一个内部类对象定依托于一个外部类对象). 回调就是在闭包的基础上实现的 ...

  3. Java闭包概念

    闭包又称词法闭包 闭包最早定义为一种包含<环境成分>和<控制成分>的实体. 解释一:闭包是引用了自由变量的函数,这个被引用的变量将和这个函数一同存在. 解释二:闭包是函数和相关 ...

  4. 深入理解Java闭包概念

    闭包又称词法闭包 闭包最早定义为一种包含<环境成分>和<控制成分>的实体. 解释一:闭包是引用了自由变量的函数,这个被引用的变量将和这个函数一同存在. 解释二:闭包是函数和相关 ...

  5. java闭包

    闭包就是在一个外部类A中声明了一个内部类B,然后这个内部类可以访问他自己B的作用域和外部类A的作用域.然后现在用另外一个类C创建了一个内部类B,那么这个内部类B可以访问C的作用域. 如果没有闭包,那B ...

  6. Java 8怎么了:局部套用vs闭包

    [编者按]本文作者为专注于自然语言处理多年的 Pierre-Yves Saumont,Pierre-Yves 著有30多本主讲 Java 软件开发的书籍,自2008开始供职于 Alcatel-Luce ...

  7. js闭包vs Java内部类

    前言: 昨天写了一个关于Java内部的博客,在内部类的最后一点中谈到了Java闭包的概念,他是这样定义闭包的:闭包是一个可调用的对象,它记录了一些信息,这些信息来自创建它的作用域.结合Java的内部类 ...

  8. Java牛人

    Java领域有很多著名的人物,他们为Java社区编写框架.产品.工具或撰写书籍改变了Java编程的方式.本文是<最受欢迎的8位Java牛人>的2.0版本. PS:排名不分先后.本文的信息整 ...

  9. 你应当知道的Java牛人

    Java领域有非常多著名的人物,他们为Java社区编写框架.产品.工具或撰写书籍改变了Java编程的方式. 本文是<最受欢迎的8位Java牛人>的2.0版本号. PS:排名不分先后.本文的 ...

随机推荐

  1. 安装postman时遇到“无法定位程序输入点 SetDefaultDllDirectories于动态链接库KERNEL32.dll 上.”的问题

    安装postman时遇到“无法定位程序输入点 SetDefaultDllDirectories于动态链接库KERNEL32.dll 上.”的问题 解决办法: 1.安装系统更新补丁KB2533623,下 ...

  2. eureka server 单节点与多节点部署演示

    环境搭建 目录结构(ad-eureka为子模块) --ad-spring-cloud --ad-eureka --pom.xml --pom.xml 主pom.xml <?xml version ...

  3. Appium连接模拟器

    Appnium 环境搭建 覆盖文件 将SDK中platform-tools目录下的这三个文件 复制到模拟安装路径bin目录下,覆盖原有的这三个文件 adb命令 开启服务 adb start-serve ...

  4. 1052 Linked List Sorting (25分)

    题目 1. 思路 使用map存放所有的地址对 使用起始地址遍历map,结果存放在vector中 排序vector 输出vector 2. 注意点 开始的时候起始地址为-1 可能有些节点没有用到,注意排 ...

  5. 使用acme.sh签发Let's Encrypt的免费数字证书

    --------------安装----------------curl https://get.acme.sh | sh#让alias生效source ~/.bashrc ------------- ...

  6. 自己动手系列----使用数组实现一个简单的Set

    Set:注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复.主要有HashSet和TreeSet两大实现类. ...

  7. [CCPC2019 哈尔滨] A. Artful Paintings - 差分约束,最短路

    Description 给 \(N\) 个格子区间涂色,有两类限制条件 区间 \([L,R]\) 内至少 \(K\) 个 区间 \([L,R]\) 外至少 \(K\) 个 求最少要涂多少个格子 Sol ...

  8. jsp中 EL表达式 ${}

    原文位置:https://zhidao.baidu.com/question/711232806155434565.html jsp标签中的 ${表达式}用来输出或者计算一个表达式的内容,比如${3+ ...

  9. 利用Python数据分析基础

    一.Numpy的ndarray:一种多维数组 ndarray是一个通用的同构多维数据容器,其所有元素必须是相同的类型.每个数组都有一个shape(一个表示各维度的元组)和dtype(一个用于说明数据数 ...

  10. null值与非null只比较大小时,只会返回false

    DateTime? time=null; DateTime now=DateTime.Now; null值与非null只比较大小时,只会返回false 无论是大于比较还是小于比较还是等于,都会返回fa ...