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

封装集合(Encapsulate Collection)

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

一、动机

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

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

二、做法

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

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

3、编译

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

5、编译,测试

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

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

8、编译,测试

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

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

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

12、编译,测试

时间: 2024-09-21 00:34:01

重构——28封装集合(Encapsulate Collection)的相关文章

重构——27封装字段(Encapsulate Field)

封装字段(Encapsulate Field) 你的类中存在一个public字段:将它声明为private,并提供相应的访问函数 一.动机 面向对象的重用原则之一就是封装,或者称为"数据隐藏" 二.做法 1.为public字段提供取值/设值函数 2.找到这个类之外使用该字段的所有地点.如果客户只是读取该字段,就把引用替换为对取值函数的调用:如果客户修改了该字段,就将此引用点替换为对设值函数的调用 3.每次修改后,编译并测试 4.将字段的所有用户修改完毕后,将字段声明为private 5

重构——54封装向下转型(Encapsulate Downcast)

封装向下转型(Encapsulate Downcast) 某个函数返回的对象,需要由函数调用者执行向下转型(downcast):将向下转型动作移到函数中 一.动机 1.向下转型是一种罪恶 2.java 5以后几乎可以绝迹 二.做法 1.找出必须对函数调用结果进行向下转型的地方 2.将向下转型搬移到该函数中

Java封装集合的方法

对于一般的成员变量,对其提供简单的getter/setter封装即可.而对于一个集合类,不能够这样做. 对于一个简单的成员变量,可以这样: class Athlete { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } // ...... } 而如果是一个Set/List/Map或数组,应该: [1]初始化这个集

Java 集合之Collection 接口和遍历方法

这几篇是我按网上的教程来实习的. URL: http://www.cnblogs.com/jbelial/archive/2013/03/27/2981395.html 打代码的感觉挻好的.. 注意在遍历Collection类时,JDK 1.5 提供的 foreach 循环来代替访问集合元素更加便捷: 注意:当使用Iterator 来访问 Collection 集合元素时,Collection 集合里面的元素不能被改变(不可通过集合对象的方法操作集合中的元素,会发生异常).只能通过Iterato

【经典源码收藏】基于jQuery的项目常见函数封装集合_jquery

本文实例汇总了基于jQuery的项目常见函数封装.分享给大家供大家参考,具体如下: /// <reference path="jquery-1.8.0.min.js" /> /* * DIV或元素居中 * @return */ jQuery.fn.mCenterDiv = function () { this.css("position", "absolute"); this.css("border", "

Java 集合:Collection,List,ArrayList,Vector,LinkedList(实现方式,对比)

Collection 与 List Collection 是 Java 集合的一个根接口,JDK 没有它的实现类. 内部仅仅做 add(),remove(),contains(),size() 等方法的声明. List 接口是Collection 接口的一个子类,在Collection 基础上扩充了方法.同时可以对每个元素插入的位置进行精确的控制,它的主要实现类有 ArrayList,Vector,LinkedList. LIST接口实现的类:插入值允许为空,也允许重复. ArrayLIst A

mongoDB 定长集合(capped collection)

大多数情况下,mongoDB中都是普通的集合,这些集合也称为动态集合,可以自动增长以容纳更多的数据.但这并不适合所有的场景.比如需要保存应用程序的某一个时间段日志,对于历史日志需要定期老化.这种情形下,定长集合就派上了用场.本文描述了定长集合的特性以及给出相关演示. 一.定长集合的特性 需要事先创建,创建时指定大小,即大小固定,后续不可以随意改变 新文档被插入到队列末尾 使用循环的方式老化最老的文档,即不支持从定长集合手动删除文档 数据被顺序写入到磁盘上的固定空间 固定集合不能被分片 由于覆盖特

国外JavaScript经典封装集合整理第1/3页_javascript技巧

我想大家对我印象不是很深,但是我在经典已经有两三年了,我真的很喜欢这里,知道经典的人最常挂在嘴边的一句话就是︰经典论坛是牛人呆的地方. 我是一个爱好网页设计的人,但我却从来不与商业打交道,原因很简单,兴趣有时候单纯让它只是兴趣会比较好. 在经典呆的时间虽然不是很长,但是我跟大家一样,从经典学到很多东西,一想到这里,总觉得欠经典一份情,因为学到了很多东西,但是没有任何贡献. 发这篇并不是想引起大家的注意,只是这篇早该发的帖子却迟迟未发,搁在心里实在有点难受,所以趁着今天空闲着,赶紧把东西整理一下,

Java基础-15总结对象数组,集合Collection,集合List

你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 1:对象数组(掌握) (1)数组既可以存储基本数据类型,也可以存储引用类型.它存储引用类型的时候的数组就叫对象数组. (2)案例: 用数组存储5个学生对象,并遍历数组. package cn.itcast_01;