`
381895649
  • 浏览: 230335 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java 代码重构-第一章(使用策略模式,把恶心的switch代码去掉...) 二

    博客分类:
  • java
 
阅读更多

 

上一篇文章: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
0
3
分享到:
评论

相关推荐

    .java代码重构

    《.java代码重构》 代码重构是软件开发过程中的一个重要环节,它涉及到对现有代码的改进,以提高代码的可读性、可维护性,同时并不改变其外在行为。在Java编程中,代码重构是一种常见的实践,尤其在大型项目中,...

    java代码重构一到六章

    ### Java代码重构:掌握优化现有代码的艺术 #### 引言 在软件开发的过程中,随着项目的不断演进,代码库往往会出现复杂度增加、可读性和可维护性下降的问题。这时,进行代码重构变得至关重要。重构是指在不改变...

    java代码重构经验总结

    ### Java代码重构经验总结 在软件开发过程中,代码重构是一项重要的技能,它旨在不改变代码外部行为的前提下,改进其内部结构,从而提升代码质量和可维护性。本文将深入探讨Java代码重构的关键点,涵盖重构原则、...

    一本介绍如何将现有的 Java 代码重构为 Kotlin 代码的书籍

    本书《从Java到Kotlin:重构指南》由Duncan McGregor与Nat Pryce共同编写,是一本专为已经熟悉Java编程语言并希望将其现有代码转换为Kotlin的开发者准备的书籍。书中不仅提供了丰富的重构技巧,还包括了实用的示例和...

    重构-第3章 代码的坏味道-读书笔记

    《重构-第3章 代码的坏味道》是软件开发领域的一本经典著作,由Martin Fowler所著。这本书深入探讨了如何识别并消除代码中的不良设计模式,以提高代码质量、可读性和可维护性。在第三章中,作者详细列举了多种"代码...

    java代码重构经验分享

    Java 代码重构经验分享 Java 代码重构是指在不改变外部行为的情况下,修改代码的内部结构,以提高代码的可维护性、可读性和可扩展性。本文总结了 Java 代码重构的经验和技术规范,包括重构要求、重构的工作、代码的...

    重构-改善既有代码的设计

    《重构-改善既有代码的设计》是一本专注于Java编程领域的经典著作,主要探讨了如何通过重构技术来提升既有代码的质量和可维护性。重构是软件开发过程中一个至关重要的环节,它旨在不改变代码外在行为的前提下,改进...

    Java 代码重构实例

    Java代码重构是一种优化编程实践,旨在改进代码的结构和可读性,而不改变其外部行为。重构对于提高软件质量和维护性至关重要,尤其是在大型项目中。以下是一些在Java重构中的关键原则和技巧,通过实例来展示如何应用...

    重构-改善既有代码的设计.pdf

    重构-改善既有代码的设计.pdf重构-改善既有代码的设计.pdf

    《重构——改善既有代码的设计》第一个案例代码

    2. **简化条件表达式**: 当条件语句过于复杂时,可以使用策略模式或者引入枚举类型来简化。例如,将多层嵌套的if-else结构替换为更清晰的决策表或函数对象。 3. **提取方法**: 如果一个函数或方法包含多个步骤,将...

    重构_改善既有代码的设计 Java

    《重构:改善既有代码的设计》是一本在IT领域广受推崇的经典著作,专注于软件开发中的重构实践,尤其针对Java编程语言。重构是软件开发过程中的一个重要环节,它旨在提升代码的可读性、可维护性和整体质量,而不会...

    java 重构改善既有代码的设计.pdf

    Java作为一种广泛使用的编程语言,重构其代码尤为重要,因为Java应用往往生命周期较长,需要不断适应变化的需求。 重构改善代码结构的基本原则包括: 1. 保持代码清晰:确保代码易于理解,每个方法和类都拥有明确...

    Java设计模式+代码重构等PDF合集

    第二版的《Java设计模式》中文版提供了丰富的例子和深入的解析,涵盖了23个经典的设计模式,不仅讲解了每个模式的基本原理,还展示了如何在实际的Java项目中应用这些模式。这本书对于初学者来说,是理解设计模式概念...

    重构--改善既有代码的设计_中文版

    java开发经典书籍,重构--改善既有代码的设计_中文版 java开发经典书籍,重构--改善既有代码的设计_中文版 java开发经典书籍,重构--改善既有代码的设计_中文版

    Java代码重构要求简要汇总.zip

    Java代码重构是软件开发过程中的一个关键环节,它旨在改进代码的结构,提高代码的可读性和可维护性,而不改变其外部行为。这个过程对于长期的项目维护和团队协作至关重要。以下是对“Java代码重构要求简要汇总”文档...

    mysql-connector-java-5.1.22-bin.jar

    MySQL Connector/J是MySQL数据库与Java应用程序之间的重要桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,使得Java开发者能够通过编写Java代码来访问和操作MySQL数据库。标题中的"mysql-...

    重构_重构_改善既有代码_

    《重构:改善既有代码设计》是一本由Martin Fowler所著的经典IT著作,它详细阐述了在软件开发过程中如何通过重构来提升代码质量、可读性和维护性。重构是一种系统性的方法,旨在不改变软件外在行为的前提下,改进其...

    Java 代码重构示例

    Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例

Global site tag (gtag.js) - Google Analytics