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. 为data中的某一个对象添加一个属性不起作用——this.$set的正确使用

    this.$set(obj, key, value) 我们在项目开发的过程中,经常会遇到这种情况:为data中的某一个对象添加一个属性 <template> <div class=& ...

  2. update(十)

    Vue 的 _update 是实例的一个私有方法,它被调用的时机有 2 个,一个是首次渲染,一个是数据更新的时候:由于我们这一章节只分析首次渲染部分,数据更新部分会在之后分析响应式原理的时候涉及._u ...

  3. Vue 嵌套路由使用总结

    Vue 嵌套路由使用总结   by:授客 QQ:1033553122   开发环境   Win 10   node-v10.15.3-x64.msi 下载地址: https://nodejs.org/ ...

  4. IDEA更换背景颜色与字体

    打开IDEA 选择左上角的File  ->  Setting -> Editor  -> Color Scheme  就可以设置  黑白背景  默认为白色  可以选择  Darcul ...

  5. 0002 增加APP配置

    创建好工程后的第一步就是配置APP,目前有两个APP,配置APP的步骤如下: 01 APP目录配置 01.1 在APP目录下创建Templates目录,用于存储模板文件 01.2 在APP目录下创建v ...

  6. [CodeIgniter4]故障排除和本地开发服务器

    故障排除 以下是一些常见的安装问题,以及建议的解决方法. 我必须在我的URL中包含index.php 如果``/mypage/find/apple``类似的URL``/index.php/mypage ...

  7. Mybatis-对数据库的关联查询

            由于MyBatis逆向工程生成的代码只能进行对单表的操作(功能已经很强大了),但是远远不能满足开发的需要,下面就简单讲解下MyBatis进行关联查询的简单案例. 一.一对一关联查询 1 ...

  8. HTML5-语义化

    什么是语义化?就是用合理.正确的标签来展示内容,比如h1~h6定义标题. 语义化优点: 易于用户阅读,样式丢失的时候能让页面呈现清晰的结构. 有利于SEO,搜索引擎根据标签来确定上下文和各个关键字的权 ...

  9. 题解【UVA10054】The Necklace

    题目描述 输入格式 输出格式 题意简述 有一种由彩色珠子连接而成的项链.每个珠子的两半由不同颜色组成.如图所示,相邻两个珠子在接触的地方颜色相同.现在有一些零碎的珠子,需要确认它们是否可以复原成完整的 ...

  10. centos 7 pip install MySQL-python 报错

    pip install MySQL-python 报错 pip install MySQL-python DEPRECATION: Python . Please upgrade your Pytho ...