重构——28封装集合(Encapsulate Collection)

简介: 封装集合(Encapsulate Collection):有个函数返回一个集合;让这个函数返回该集合的一个只读副本,并在这个类中提供添加/移除集合元素的函数

封装集合(Encapsulate Collection)

有个函数返回一个集合;让这个函数返回该集合的一个只读副本,并在这个类中提供添加/移除集合元素的函数

一、动机

1、取值函数不应该返回集合本身

2、不应该为整个集合提供一个设值函数

二、做法

1、加入为集合添加/移除元素的函数

2、将保存集合的字段初始化为一个空集合

3、编译

4、修改所有集合设值函数的调用者

5、编译,测试

6、找出所有通过取值函数获取集合并修改其内容的函数,修改之,每次修改后,编译并测试

7、修改集合取值函数自身,使它返回该集合的一个只读副本

8、编译,测试

9、找出取值函数的所有用户,从中找出应该存在于集合所属对象内的代码,运用Extract Method,Move Method将这些代码迁移到宿主对象中

10、修改取值函数的名字,然后添加一个取值函数,使其返回一个枚举。找出所有引用点,修改取值函数

11、如果这一步跨度太大,你可以先使用Rename Method修改原取值函数名称,再建立一个新取值函数用以返回枚举,最后再修改所有调用者,使其调用新取值函数

12、编译,测试

目录
相关文章
|
7月前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
106 3
|
7月前
|
存储 关系型数据库 MySQL
lodash库——封装好的collection集合函数
lodash库——封装好的collection集合函数
121 0
defaultdict初始化字典,封装起来用来,计数,计算词频
defaultdict初始化字典,封装起来用来,计数,计算词频
|
存储 关系型数据库 MySQL
lodash库_封装好的collection集合函数
lodash库_封装好的collection集合函数
147 0
ts重点学习77-泛型接口
ts重点学习77-泛型接口
72 0
ts重点学习77-泛型接口
ts重点学习5-泛型接口
ts重点学习5-泛型接口
72 0
ts重点学习5-泛型接口
ts重点学习78-泛型接口
ts重点学习78-泛型接口
89 0
ts重点学习78-泛型接口
ts重点学习75-泛型约束
ts重点学习75-泛型约束
189 0
ts重点学习75-泛型约束
ts重点学习3-泛型约束
ts重点学习3-泛型约束
83 0
ts重点学习3-泛型约束