封装集合(Encapsulate Collection)
有个函数返回一个集合;让这个函数返回该集合的一个只读副本,并在这个类中提供添加/移除集合元素的函数
一、动机
1、取值函数不应该返回集合本身
2、不应该为整个集合提供一个设值函数
二、做法
1、加入为集合添加/移除元素的函数
2、将保存集合的字段初始化为一个空集合
3、编译
4、修改所有集合设值函数的调用者
5、编译,测试
6、找出所有通过取值函数获取集合并修改其内容的函数,修改之,每次修改后,编译并测试
7、修改集合取值函数自身,使它返回该集合的一个只读副本
8、编译,测试
9、找出取值函数的所有用户,从中找出应该存在于集合所属对象内的代码,运用Extract Method,Move Method将这些代码迁移到宿主对象中
10、修改取值函数的名字,然后添加一个取值函数,使其返回一个枚举。找出所有引用点,修改取值函数
11、如果这一步跨度太大,你可以先使用Rename Method修改原取值函数名称,再建立一个新取值函数用以返回枚举,最后再修改所有调用者,使其调用新取值函数
12、编译,测试