重构——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、编译,测试

目录
相关文章
|
24天前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可为任意类型,有序且支持get、set、has、delete操作;Set存储唯一值,提供add、delete、has方法。两者皆可迭代。示例展示了Map和Set的基本用法,如添加、查询、删除元素。
13 2
|
8月前
|
存储 Java
Java集合框架Set接口
Java集合框架中的Set接口是一种不允许包含重复元素的集合。Set接口继承自Collection接口,因此它具有Collection接口定义的所有方法。同时,Set接口还具有自己的特殊方法,例如:添加元素、删除元素、判断元素是否存在等。 Set接口的实现类包括HashSet、LinkedHashSet和TreeSet。 HashSet是基于哈希表实现的Set集合,它不保证集合中元素的顺序。由于哈希表的实现机制,HashSet的添加、删除和查找操作都具有很好的性能,时间复杂度为O(1)。 LinkedHashSet是基于链表和哈希表实现的Set集合,它保证集合中元素的插入顺序。在插入元素时,它
51 0
|
10月前
|
存储 关系型数据库 MySQL
lodash库_封装好的collection集合函数
lodash库_封装好的collection集合函数
111 0
手动实现es6的set集合 模拟set集合实现对应的功能
手动实现es6的set集合 模拟set集合实现对应的功能
ts重点学习8-泛型类定义
ts重点学习8-泛型类定义
47 0
ts重点学习5-泛型接口
ts重点学习5-泛型接口
50 0
ts重点学习5-泛型接口
|
存储 算法 搜索推荐
我学会了,封装自己的专属集合Set
集合是高层的数据结构,高层的数据结构还有栈和队列,这种数据结构更像是定义好了这种数据结构的相应的使用接口。 有了这些使用的接口包括这些数据结构本身所维持的一些性质,就可以非常容易的把它们放入一些具体的应用中,但是底层实现可以是多种多样的。 比如栈和队列的底层实现即可以是动态数组也可以是链表,集合 Set 也是类似这样的数据结构。
71 0
我学会了,封装自己的专属集合Set
|
存储 安全 算法
重构——18自封装字段(Self Encapsulate Field)
自封装字段(Self Encapsulate Field):你直接访问一个字段,但与字段之间的耦合关系逐渐变得笨拙;为这个字段建立取值/设置函数,并且只以这些函数来访问字段
1797 0