快速业务通道

使用Eclipse自动重构特性的方法与原因 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25
etMotor() { return motor; } public void setMotor(String string) { motor = string; } }

您还有一个 Vehicle 的子类,类名为 Automobile ,如清单6所示。

清单6. Automobile 类

public class Automobile extends Vehicle { private String make; private String model; public String getMake() { return make; } public String getModel() { return model; } public void setMake(String string) { make = string; } public void setModel(String string) { model = string; } }

请注意, Vehicle 有一个属性是 motor 。如果您知道您将永远只处理汽车,那么这样做就好了;但是如果您也允许出现划艇之类的东西,那么您就需要将 motor 属性从 Vehicle 类下放到 Automobile 类中。为此,您可以在 Outline 视图中选择 motor ,然后选择 Refactor > Push Down。

Eclipse 还是挺聪明的,它知道您不可能总是单单移动某个属性本身,因此还提供了 Add Required 按钮,不过在Eclipse2.1 中,这个功能并不总是能正确地工作。您需要验证一下,看所有依赖于这个属性的方法是否都推到了下一层。在本例中,这样的方法有两个,即与 motor 相伴的 getter 和 setter 方法,如图3所示。

图 3. 加入所需的成员

使用Eclipse自动重构特性的方法与原因(5)

时间:2009-11-10 ibm David Gallardo

在按过 OK按钮之后, motor 属性以及 getMotor() 和 setMotor() 方法就会移动到 Automobile 类中。清单7显示了在进行了这次重构之后 Automobile 类的情形。

清单 7. 经过重构的 Automobile 类

public class Automobile extends Vehicle { private String make; private String model; protected String motor; public String getMake() { return make; } public String getModel() { return model; } public void setMake(String string) { make = string; } public void setModel(String string) { model = string; } public String getMotor() { return motor; } public void setMotor(String string) { motor = string; } }

Pull Up 重构与 Push Down 几乎相同,当然 Pull Up 是将类成员从一个类中移到其父类中,而不是子类中。如果您稍后改变主意,决定还是把 motor 移回到 Vehicle 类中,那么您也许就会用到这种重构。同样需要提醒您,一定要确认您是否选择了所有必需的成员。

Automobile 类中具有成员 motor,这意味着您如果创建另一个子类,比方说 Bus ,您就还需要将 motor (及其相关方法)加入到 Bus 类中。有一种方法可以表示这种关系,即创建一个名为 Motorized 的接口, Automobile 和 Bus 都实现这个接口,但是 RowBoat 不实现。

创建 Motorized 接口最简单的方法是在 Automobile 上使用 Extract Interface 重构。为此,您可以在 Outline 视图中选择 Automobile ,然后从菜单中选择 Refactor > Extract Interface。您可以在弹出的对话框中选择您希望在接口中包含哪些方法,如图4所示。

图 4. 提取 Motorized 接口

点击 OK 之后,接口就创建好了,如清单8所示。

清单 8. Motorized 接口

public interface Motorized { public abstract String getMotor(); public abstract void setMotor(String string); }

同时, Automobile 的类声明也变成了下面的样子:

public class Automobile extends Vehicle implements Motorized

使用Eclipse自动重构特性的方法与原因(6)

时间:2009-11-10 ibm David Gallardo

使用父类

本重构工具类型中最后一个是 User Supertyp Where Possible。想象一个用来管理汽车细帐的应用程序。它自始至终都使用 Automobile 类型的对象。如果您想处理所有类型的交通工具,那么您就可以

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号