上一篇文章:java 代码重构-第一章(使用策略模式,把恶心的 switch代码去掉...) 一
下一篇文章:java 代码重构-第一章(结语...目录,源代码下载)
上一篇文章,没有把switch代码去掉,现在再继续去做..这里正式运用策略模式
我的作法是一次取出一个case 分支,在相应的class内建立一个覆写函数(overriding method)。先从 RegularPrice 开始:
RegularPrice
/**
* 获取普通电影收费
*
* @param daysRented
* @return
*/
double getCharge(int daysRented) {
double result = 2;
if (daysRented > 2)
result += (daysRented - 2) * 1.5;
return result;
}
ChildrensPrice
/**
* 获取儿童电影的收费
*
* @param daysRented
* @return
*/
double getCharge(int daysRented) {
double result = 1.5;
if (daysRented > 3)
result += (daysRented - 3) * 1.5;
return result;
}
NewReleasePrice
/**
* 获取新发布电影收费
*
* @param daysRented
* @return
*/
double getCharge(int daysRented) {
return daysRented * 3;
}
处理完所有case 分支之后,我就把Price.getCharge() 声明为abstract。
class Price...
abstract double getCharge(int daysRented);
Price
price {...
/**
* 获取经常的租赁
*
* @param daysRented
* @return
*/
int getFrequentRenterPoints(int daysRented) {
if ((getPriceCode() == Movie.NEW_RELEASE) && daysRented > 1)
return 2;
else
return 1;
}
}
但是这一次我不把superclass 函数声明为abstract。我只是为「新片类型」产生一个覆写函数(overriding method ),并在superclass 内留下一个已定义的函数,使它成为一种缺省行为。
NewReleasePrice
NewReleasePrice{...
/**
* 获取新发布电影经常的租赁
*
* @param daysRented
* @return
*/
int getFrequentRenterPoints(int daysRented) {
return (daysRented > 1) ? 2 : 1;
}
}
Price
Price{...
/**
* 获取经常的租赁
*
* @param daysRented
* @return
*/
int getFrequentRenterPoints(int daysRented) {
return 1;
}
}
引入State 模式花了我不少力气,值得吗?这么做的收获是:如果我要修改任何与价格有关的行为,或是添加新的定价标准,或是加 入其他取决于价格的行为,程序的修改会容易得多。这个程序的其余部分并不知道我运用了State 模式。对于我目前拥有的这么几个小量行为来说,任何功能或特性上的修改也许都称不上什么困难,但如果在一个更复杂 的系统中,有十多个与价格相关的函数,程序的修改难易度就会有很大的区别。以上所有修改都是小步骤进行,进度似乎 太过缓慢,但是没有任何一次我需要打开调试器(debugger),所以整个过程实际上很快就过去了。
现在我已经完成了第二个重要的重构行为。从此,修改「影片分类结构」,或是改变「费用计算规则」、改变常 客积点计算规则,都容易多了。图1.16和图1.17描述State 模式对于价格信息所起的作用。
下面是运行结果...成功重构...开心吧...好了,跟女朋友玩去...
Rental Record for oyhk
少林足球 6.0
大话西游 1.5
一路向西 2.0
Amount owed is 9.5
You earned 4 frequent renter points
------------------------------------------------
<H1>Rentals for <EM>oyhk</EM></ H1><P>
少林足球: 6.0<BR>
大话西游: 1.5<BR>
一路向西: 2.0<BR>
<P>You owe <EM>9.5</EM><P>
On this rental you earned <EM>4</EM> frequent renter points<P>
重构的小例子完成了....一个个类的源代码我就不贴出来,直接下载整个项目的源代码吧...
本文章来自:http://blog.mkfree.com/posts/31
- 大小: 26.5 KB
- 大小: 36.7 KB
分享到:
相关推荐
JAVA 代码重构 JAVA 代码重构 JAVA 代码重构 JAVA 代码重构 JAVA 代码重构
java代码重构经验分享
关于如何重构java代码的。看过好一定很有感触。
重构-改善既有代码的设计(高清版)pdf 重构-改善既有代码的设计(高清版)pdf 重构-改善既有代码的设计(高清版)pdf 重构-改善既有代码的设计(高清版)pdf
讲述了java代码的重构总结 规范代码,有必要好好学习
Java 代码 重构 实例 指南 ,欢迎下载
java开发经典书籍,重构--改善既有代码的设计_中文版 java开发经典书籍,重构--改善既有代码的设计_中文版 java开发经典书籍,重构--改善既有代码的设计_中文版
Java设计模式+代码重构等PDF合集,Java设计模式+代码重构等PDF合集,Java设计模式+代码重构等PDF合集,Java设计模式+代码重构等PDF合集
java代码重构
Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例
重构技巧: 书中介绍了一系列将 Java 代码重构为 Kotlin 的技巧和方法,包括语法转换、代码结构调整、使用 Kotlin 的特性等方面。 实用示例: 书中通过丰富的实例和案例来演示如何进行代码重构,包括常见的 Java ...
NULL 博文链接:https://hongmingchun.iteye.com/blog/1606097
java代码重构以前忽视了,最近在看 字字珠玑,相见恨晚
重构-改善既有代码的设计--高清版.pdf
本代码是《重构 改善既有代码的设计》书中的第一个案例,用于影片出租点用的程序,对于原始代码的几次重构
第1 章 模式的简史和形而上学........3 1.1 模式是什么...................................3 1.2 软件模式的简史...........................3 1.3 模式的起源...................................4 1.4 与道家思想...
业内非常有名的书,几乎是所有JAVA进阶级高手必看的一本书。其实不论你是JAVA高手还是JAVA菜鸟,我都推荐你看一下这本有关JAVA重构的书。别等你的程序员朋友问你是否看过《重构 改善既有代码的设计》 时,你尴尬地...
重构--改善既有代码的设计.epub
重构----改善既有代码的设计(完整中文扫描版PDF)