Java - 闭包
- 概述
- 简单介绍 闭包
1. 聚合关系
概述
- 常见的 类间关系
场景
类 A
- 主要类
- 持有 类B 的实例
- 有点行为, 需要 类 B 的介入
类 B
- 有自己的行为
- A 会在某些时候调用 B 的行为
代码示例
伪代码
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. 换一个角度
概述
- 闭包
闭包
- 可以调用的对象
- 包含了作用域的信息
- 这玩意也不是什么类间关系
- 为啥把它和 聚合 放一块
场景
类 A
- 单一类
- 持有 类B 的实例
类 B
- 是 类A 的属性
- 是 A 的 内部类
- 实现了 接口I
接口I
- 被 B 实现
- 作为 引用对象, 接收 B 类实例
示例
伪代码
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();
代码
- 有空再补
tips
内部类
- 内部类持有 外部类 的一个引用
- 通过 OuterClass.this 来获取
- 内部类持有 外部类 的一个引用
getCallBackRef
返回一个 I 类型的对象
- 实现方法
- 方便外面接收实例
实际返回的, 是 内部类 的实例
内部类的 method1
来自 I 的实现
实际行为
- 需要靠 A 来执行
然后一个类比
模型
- 类A 持有 类B
- 类A 的行为, 由 类B 来执行
聚合
- 符合这个模型
闭包
- 内部类的角度, 也符合这个模型
- 当然有点别扭
- 别扭的是, 内部类持有了 外部类 的引用
- 其实, 这个也不用奇怪
- 内部类 外部类 的关系, 和 聚合关系, 并没有直接的 可比性
- 当然, 只是相似
- 一个持有另一个
闭包
- 行为
- 得到一个 接口I 类型, 但实际为 内部类 的对象
- 当然, 这个接口, 也可以换成 抽象类
- 这个对象, 持有创建它的外部类
- 可以通过它, 暴露一些外部类的方法, 属性
- 可以通过这个持有, 保持外部类不被垃圾回收
- 得到一个 接口I 类型, 但实际为 内部类 的对象
- 行为
3. 好了, 那闭包到底有什么用
- 多重继承
java 的继承
- 正常情况下, 只能继承一个类
- 接口实现多个, 这个另说
多重继承
也不是真正意义上的多重继承
思路
约定
- 类 Outer
- 外部类
- 类 Inner
- 内部类
- 类 Abs1
- 抽象类1
- 类 Abs2
- 抽象类2
- 类 Outer
场景
- Outer 继承 Abs1
- Inner 继承 Abs2
- Inner 实现 Abs2 方法
- 实现的时候, 可以引入 Outer 对象来做操作
- 虽然不是真正的多重继承, 但实质上已经可以这么认为
- Outer 实现方法, 返回 Abs2 类型的对象
- 实际返回 Inner 类型的实例
- 其他使用者, 用 Abs2 类型的引用, 来接住这个实例
ps
类间关系
- ref
- 关于 依赖 与 聚合
约定
- 类 A
- 主体类
- 类 B
- 被依赖
- 被聚合
- 类 A
依赖
- 重点
- A 的方法, 需要 B 来做参数
- 可能导致的结果, A 的行为, 会受到 B 影响
- A 的方法, 需要 B 来做参数
- 重点
聚合
- 重点
- A 的属性, 是 B
- 可能导致的结果, A 的行为, 会受到 B 影响
- 怎么和上面一样...
- 可能导致的结果, A 的行为, 会受到 B 影响
- A 的属性, 是 B
- 重点
区别
- 依赖
- 强调的关系, 没有聚合那么紧密
- 临时产生一个交集
- 交互完了关系立马消失
- 聚合
- 关系相对紧密, 整体 与 部分 的关系
- 关系较为稳定
- 整体存在, 关系一直都存在
- 依赖
内部类
- 这块暂时不细说
- Java 编程思想里, 有一章专门对这块做了详细的介绍
- 这块暂时不细说
其他
类间关系, UML
- 这块其实, 还是挺有用的
js 闭包
- 我第一见到闭包, 其实是 js
- 但是至今没有理解
伪代码
- 这块最好还是总结下吧
- 伪代码其实是 思路的体现
- 强调重点
- 与具体的语法独立
- 写起来方便
- 可以翻译成其他语言
- 我至今没有学太好
- 第一见到, 是偏向 py 的伪代码
- 但是 java 中的很多东西, py 不好表达
- 第一见到, 是偏向 py 的伪代码
- 所以希望还是能学会这个东西
- 最好有足够强的表达能力
- 希望可以简单易懂
- 翻译起来, 不那么费劲
- 伪代码其实是 思路的体现
- 这块最好还是总结下吧
Java - 闭包的更多相关文章
- java 闭包与回调
闭包(closure)是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域. 内部类是面向对象的闭包,因为它不仅包含外围类对象(创建内部类的作用域)的信息,还自动拥有一个指向此外围类对象 ...
- Java闭包和回调
Java中的闭包与回调可以通过成员内部类来实现. 简单的来说闭包就是返回一个内部类对象,这个内部类对象包含了外部类对象的信息(因为一个内部类对象定依托于一个外部类对象). 回调就是在闭包的基础上实现的 ...
- Java闭包概念
闭包又称词法闭包 闭包最早定义为一种包含<环境成分>和<控制成分>的实体. 解释一:闭包是引用了自由变量的函数,这个被引用的变量将和这个函数一同存在. 解释二:闭包是函数和相关 ...
- 深入理解Java闭包概念
闭包又称词法闭包 闭包最早定义为一种包含<环境成分>和<控制成分>的实体. 解释一:闭包是引用了自由变量的函数,这个被引用的变量将和这个函数一同存在. 解释二:闭包是函数和相关 ...
- java闭包
闭包就是在一个外部类A中声明了一个内部类B,然后这个内部类可以访问他自己B的作用域和外部类A的作用域.然后现在用另外一个类C创建了一个内部类B,那么这个内部类B可以访问C的作用域. 如果没有闭包,那B ...
- Java 8怎么了:局部套用vs闭包
[编者按]本文作者为专注于自然语言处理多年的 Pierre-Yves Saumont,Pierre-Yves 著有30多本主讲 Java 软件开发的书籍,自2008开始供职于 Alcatel-Luce ...
- js闭包vs Java内部类
前言: 昨天写了一个关于Java内部的博客,在内部类的最后一点中谈到了Java闭包的概念,他是这样定义闭包的:闭包是一个可调用的对象,它记录了一些信息,这些信息来自创建它的作用域.结合Java的内部类 ...
- Java牛人
Java领域有很多著名的人物,他们为Java社区编写框架.产品.工具或撰写书籍改变了Java编程的方式.本文是<最受欢迎的8位Java牛人>的2.0版本. PS:排名不分先后.本文的信息整 ...
- 你应当知道的Java牛人
Java领域有非常多著名的人物,他们为Java社区编写框架.产品.工具或撰写书籍改变了Java编程的方式. 本文是<最受欢迎的8位Java牛人>的2.0版本号. PS:排名不分先后.本文的 ...
随机推荐
- 为data中的某一个对象添加一个属性不起作用——this.$set的正确使用
this.$set(obj, key, value) 我们在项目开发的过程中,经常会遇到这种情况:为data中的某一个对象添加一个属性 <template> <div class=& ...
- update(十)
Vue 的 _update 是实例的一个私有方法,它被调用的时机有 2 个,一个是首次渲染,一个是数据更新的时候:由于我们这一章节只分析首次渲染部分,数据更新部分会在之后分析响应式原理的时候涉及._u ...
- Vue 嵌套路由使用总结
Vue 嵌套路由使用总结 by:授客 QQ:1033553122 开发环境 Win 10 node-v10.15.3-x64.msi 下载地址: https://nodejs.org/ ...
- IDEA更换背景颜色与字体
打开IDEA 选择左上角的File -> Setting -> Editor -> Color Scheme 就可以设置 黑白背景 默认为白色 可以选择 Darcul ...
- 0002 增加APP配置
创建好工程后的第一步就是配置APP,目前有两个APP,配置APP的步骤如下: 01 APP目录配置 01.1 在APP目录下创建Templates目录,用于存储模板文件 01.2 在APP目录下创建v ...
- [CodeIgniter4]故障排除和本地开发服务器
故障排除 以下是一些常见的安装问题,以及建议的解决方法. 我必须在我的URL中包含index.php 如果``/mypage/find/apple``类似的URL``/index.php/mypage ...
- Mybatis-对数据库的关联查询
由于MyBatis逆向工程生成的代码只能进行对单表的操作(功能已经很强大了),但是远远不能满足开发的需要,下面就简单讲解下MyBatis进行关联查询的简单案例. 一.一对一关联查询 1 ...
- HTML5-语义化
什么是语义化?就是用合理.正确的标签来展示内容,比如h1~h6定义标题. 语义化优点: 易于用户阅读,样式丢失的时候能让页面呈现清晰的结构. 有利于SEO,搜索引擎根据标签来确定上下文和各个关键字的权 ...
- 题解【UVA10054】The Necklace
题目描述 输入格式 输出格式 题意简述 有一种由彩色珠子连接而成的项链.每个珠子的两半由不同颜色组成.如图所示,相邻两个珠子在接触的地方颜色相同.现在有一些零碎的珠子,需要确认它们是否可以复原成完整的 ...
- centos 7 pip install MySQL-python 报错
pip install MySQL-python 报错 pip install MySQL-python DEPRECATION: Python . Please upgrade your Pytho ...