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. Python 之路Day13

    匿名函数 一行函数 lambda == def -- 关键字 lambda x:x x 是普通函数的形参(位置,关键字……)可以不接收参数,可以不写 :x 是普通函数的函数值(只能返回一个数据类型), ...

  2. Unable to create initial connections of pool. spring boot mysql

    Unable to create initial connections of pool. 在链接url里添加 将useSSL=true改为useSSL=false 只能说明服务器没有打开SSL功能

  3. AdaBoost级联分类器

    Haar分类器使用AdaBoost算法,但是把它组织为筛选式的级联分类器,每个节点是多个树构成的分类器,且每个节点的正确识别率很高.在任一级计算中,一旦获得“不在类别中”的结论,则计算终止.只有通过分 ...

  4. [CF1236D] Alice and the Doll - 模拟,STL

    [CF1236D] Alice and the Doll Description \(N \times M\)网格,有 \(K\) 个格子里有障碍物.每次经过一个格子的时候只能直走或者右转一次.初态在 ...

  5. Working copy not locked; this is probably a bug, please report

    问题描述 svn: Unable to lock 'G:\chengXu\2017_Year\JFW\Easy7\src' 解决方案

  6. 集成Log4Net到自己的Unity工程

    需要使用的插件库说明: Loxodon Framework Log4NetVersion: 1.0.0© 2016, Clark Yang=============================== ...

  7. 【Unity|C#】基础篇(0)——C#与.NET框架

    [学习资料] <C#图解教程>(第1章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu.c ...

  8. QImage和IplImage转换总结

    在arm中做图像处理,因为不支持GTK,一般都会用到QT来实现显示功能,所以不可避免的要涉及到QImage和IplImage两种图像格式之间的转换,下面总结一下转换的方法. (下面格式转换的代码都是网 ...

  9. python之路之考试题目

  10. Java-POJ1011-sticks

    很经典的搜索题,直接爆搜会卡在连续相同长度的木棍,可以先排序,预处理该长度不行直接跳下一长度木棍的位置 但此题特殊,木棍长度小于50,我们可以直接桶排序 还有就是关于回溯的理解: 我们写的dfs为的是 ...