上一篇文章: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到Kotlin:重构指南》由Duncan McGregor与Nat Pryce共同编写,是一本专为已经熟悉Java编程语言并希望将其现有代码转换为Kotlin的开发者准备的书籍。书中不仅提供了丰富的重构技巧,还包括了实用的示例和...
《重构-第3章 代码的坏味道》是软件开发领域的一本经典著作,由Martin Fowler所著。这本书深入探讨了如何识别并消除代码中的不良设计模式,以提高代码质量、可读性和可维护性。在第三章中,作者详细列举了多种"代码...
Java 代码重构经验分享 Java 代码重构是指在不改变外部行为的情况下,修改代码的内部结构,以提高代码的可维护性、可读性和可扩展性。本文总结了 Java 代码重构的经验和技术规范,包括重构要求、重构的工作、代码的...
《重构-改善既有代码的设计》是一本专注于Java编程领域的经典著作,主要探讨了如何通过重构技术来提升既有代码的质量和可维护性。重构是软件开发过程中一个至关重要的环节,它旨在不改变代码外在行为的前提下,改进...
Java代码重构是一种优化编程实践,旨在改进代码的结构和可读性,而不改变其外部行为。重构对于提高软件质量和维护性至关重要,尤其是在大型项目中。以下是一些在Java重构中的关键原则和技巧,通过实例来展示如何应用...
重构-改善既有代码的设计.pdf重构-改善既有代码的设计.pdf
2. **简化条件表达式**: 当条件语句过于复杂时,可以使用策略模式或者引入枚举类型来简化。例如,将多层嵌套的if-else结构替换为更清晰的决策表或函数对象。 3. **提取方法**: 如果一个函数或方法包含多个步骤,将...
《重构:改善既有代码的设计》是一本在IT领域广受推崇的经典著作,专注于软件开发中的重构实践,尤其针对Java编程语言。重构是软件开发过程中的一个重要环节,它旨在提升代码的可读性、可维护性和整体质量,而不会...
Java作为一种广泛使用的编程语言,重构其代码尤为重要,因为Java应用往往生命周期较长,需要不断适应变化的需求。 重构改善代码结构的基本原则包括: 1. 保持代码清晰:确保代码易于理解,每个方法和类都拥有明确...
第二版的《Java设计模式》中文版提供了丰富的例子和深入的解析,涵盖了23个经典的设计模式,不仅讲解了每个模式的基本原理,还展示了如何在实际的Java项目中应用这些模式。这本书对于初学者来说,是理解设计模式概念...
java开发经典书籍,重构--改善既有代码的设计_中文版 java开发经典书籍,重构--改善既有代码的设计_中文版 java开发经典书籍,重构--改善既有代码的设计_中文版
Java代码重构是软件开发过程中的一个关键环节,它旨在改进代码的结构,提高代码的可读性和可维护性,而不改变其外部行为。这个过程对于长期的项目维护和团队协作至关重要。以下是对“Java代码重构要求简要汇总”文档...
MySQL Connector/J是MySQL数据库与Java应用程序之间的重要桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,使得Java开发者能够通过编写Java代码来访问和操作MySQL数据库。标题中的"mysql-...
《重构:改善既有代码设计》是一本由Martin Fowler所著的经典IT著作,它详细阐述了在软件开发过程中如何通过重构来提升代码质量、可读性和维护性。重构是一种系统性的方法,旨在不改变软件外在行为的前提下,改进其...
Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例