重构第二天:移动方法

原文地址:http://www.refactoring.com/catalog/moveMethod.html

在类A中,当一个方法正在用,或者将要用到的功能和资源大部分存在于另一个类B中,而非A类中时,这时我们要考虑把这个方法移到B类中去。

举一个例子:

 1 class Project {
 2   Person[] participants;
 3 }
 4
 5 class Person {
 6   int id;
 7   boolean participate(Project p) {
 8     for(int i=0; i<p.participants.length; i++) {
 9       if (p.participants[i].id == id) return(true);
10     }
11     return(false);
12   }
13 }
14
15 ... if (x.participate(p)) ...

上面的例子中participate方法用到的都是Project类中的字段,所以我们决定把participate()方法移到Project类中。

移动participate方法后:

 1 class Project {
 2   Person[] participants;
 3   boolean participate(Person x) {
 4     for(int i=0; i<participants.length; i++) {
 5       if (participants[i].id == x.id) return(true);
 6     }
 7     return(false);
 8   }
 9 }
10
11 class Person {
12   int id;
13 }
14
15 ... if (p.participate(x)) ...

这样做后,使得每个类的职责更加明确,清晰。

重构第二天:移动方法

时间: 2024-10-13 05:46:16

重构第二天:移动方法的相关文章

小酌重构系列[4]&mdash;&mdash;分解方法

概述 "分解方法"的思想和前面讲到的"提取方法"."提取方法对象"基本一致.它是将较大个体的方法不断的拆分,让每个"方法"做单一的事情,从而提高每个方法的可读性和可维护性.分解方法可以看做是"提取方法"的递归版本,它是对方法反复提炼的一种重构策略. 分解方法 下图表示了这个重构策略,第1次提炼和第2次提炼都采用了"提取方法"这个策略. 何时分解方法? "分解方法"最终

前端学PHP之面向对象系列第二篇——魔术方法

显示目录 目录 [1]构造方法 [2]析构方法 [3]不可访问属性[4]对象复制[5]字符串[6]对象不存在[7]自动加载类[8]串行化[9]函数调用 前面的话 php在面向对象部分有很多相关的魔术方法,这些方法为面向对象实现提供了便利,本文将详细介绍魔术方法 构造方法 大多数类都有一种称为构造函数的特殊方法.当创建一个对象时,它将自动调用构造函数,通常用它执行一些有用的初始化任务 构造函数的声明与其它操作的声明一样,只是其名称必须是两个下划线__construct( ).这是PHP5中的变化:

HTML5吃豆豆游戏开发实战(四)2d碰撞检测、重构-第二篇

今天下午在家没事,写代码.先总结一下学习HTML5和JS的一些经验,再来说游戏的事吧! 这完全是一个HTML5和JS的入门新手的见解,如果您和我一样是新手的话,欢迎交流,当然,高手如果不介意的话,帮小弟指点一二那就更好啦,谢谢,嘿嘿!入正题吧! 1.语法方面 1.1  JS关于数组的定义方法要注意: 比如:var walls = [new Wall(262,200,100,30),new Wall(662,60,30,400),new Wall(762,300,200,30)]; 这是定义一个墙

第二章:方法区和运行时常量池溢出

由于运行时常量池属于方法区的一部分,因此两个区域放在一块执行. String.intern()是一个Native方法,它的作用是如果字符串常量池中已经包含了此String对象的字符串,则返回代表池中这个字符串的String对象:否则将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用. 可以通过以下代码测试运行时常量池溢出: public class Test { public static void main(String[] args) { int i =0; L

ACM 324有一堆桃子不知数目猴子第一天吃掉一半又多吃了一个第二天照此方法,吃掉剩下桃子的一半又多一个,天天如此,到第m天早上,猴子发现只剩一只桃子了,问这堆桃子原来有多少个? (m&lt;29) 输入

#include<stdio.h> int fun(int m); int main() { int n; int m; scanf("%d",&n); while(n--) { scanf("%d",&m); m=m+1; printf("%d",fun(m)); printf("\n"); } return 0; } int fun(int m) { int s; if(m==1) s=1; e

《ICECSS入门指南》第二章 使用方法和基础元素

使用ICECSS 首先你需要到 https://github.com/T-baby/ICECSS 上下载最新版本的包. 我们下载后可以看到这样一个文件结构,docs是文档,css中包含了普通版.压缩版.Less版三个版本的CSS文件,font是图标字体,html文件夹里存放了两个例子,同时也是建议大家在开发时将html文件放在html文件夹中.img下存放着图片ICECSS所需的两个图片和一个例子用的logo. 为了大家使用方便,在JS文件夹中不仅有ICECSS的JS还附带了Jquery和Les

重构第二版 支持javascript 代码重构指南

作者还是 Martin Fowler 封面 添加的内容 整体的内容和以前的版本类似,但是添加了JavaScript 的有一些实践,比较期待 pdf 连接 refactoring:Improving the Design of Existing Code 原文地址:https://www.cnblogs.com/rongfengliang/p/9521011.html

小酌重构系列[3]&mdash;&mdash;方法、字段的提升和降低

本文要介绍的是4种重构策略,它们分别是提升方法.降低方法.提升字段和降低字段.由于这4种重构策略具有一定的相通性,所以我将它们放到一篇来讲解. 定义 以下是这4种策略的定义 提升方法:当子类的方法描述了相同的行为时,应将这样的方法提升到基类.降低方法:在基类中的行为仅和个别子类相关时,应将这样的行为降低到子类.提升字段:当子类中的字段描述着相同的信息时,应将这样的字段提升到基类.降低字段:当基类中的字段仅仅用于个别子类时,应将这样的字段降低到子类. 以上的定义是较为为枯燥无趣的,各位读者大可不必

201508110842_《Javascript权威指南(第六版)——方法借用,私有状态,construct重构和工厂方法》(P225-233)

1. 方法借用,就是“继承”,一个类中的原型方法在另一个类中使用. p227 generic对象 2. 私有状态:“将变量闭包在一个匿名函数内来模拟私有变量” ,这些“变量”只能被类的实例方法访问: 3. construct重构: 4. 工厂方法 5. 子类:“方法链”,“构造函数链”,“组合” 6.