实践提高《重构改善既有代码的设计第2版》PDF中文+PDF英文+对比分析

重构是编程的基础,是在不改变外部行为的前提下,有条不紊地改善代码。编程爱好者都知道,Martin Fowler 的《重构:改善既有代码的设计》已经成为全球有经验的程序员手中的利器,既可用来改善既有代码的设计、提升软件的可维护性,又可用于使既有代码更易理解、焕发出新的活力。

《重构改善既有代码的设计(第2版)》在第1 版的基础上做了全面修订,反映了编程领域业已发生的许多变化。第2 版中介绍的重构列表更加内聚,并用JavaScript 语言重写了代码范例。此外,第2 版中还新增了与函数式编程相关的重构范例,旨在教会读者如何在没有类的环境下开展重构。

新版沿袭了第1 版的结构,依次解释什么是重构,为什么要重构,如何通过“坏味道”识别出需要重构的代码,以及如何在实践中成功实施重构(无论用的是什么编程语言)。

《重构改善既有代码的设计(第2版)》中文PDF,496页,带书签目录,文字可以复制。
《重构改善既有代码的设计(第2版)》英文PDF,455页,带书签目录,文字可以复制。

作者: Martin Fowler 译者: 熊节 / 林从羽
下载: https://pan.baidu.com/s/1GaJokiES9qbO3xjlIkcBHQ
提取码: wrr2

理解重构的过程和重构的基本原则;
快速有效地应用各种重构手法,提升程序的表达力和可维护性;
识别代码中能指示出需要重构的地方的“坏味道”;
深入了解各种重构手法,每个手法都包含解释、动机、做法和范例4 个部分;


构建稳固的测试,以支持重构工作的开展;
理解重构过程的权衡取舍以及重构存在的挑战等。

凝聚了软件开发社区专家多年摸索而获得的宝贵经验,所蕴涵的思想和精华,值得反复咀嚼,而且往往能够常读常新。

我们可以在学习java的同时参考,用于java代码的重构。

学习中要参考配套的示例代码和项目代码,学习课后习题的解决方法、编程思路。
《疯狂Java讲义第4版》PDF,899页,带目录,文字可以复制。
配套源代码,课件,面试题等。
下载: https://pan.baidu.com/s/1LiTH0heKhWiP0LKakEPYdw 
提取码: ck58


《疯狂Java讲义第4版》全面新增Java 9的新特性。深入介绍了Java编程的相关方面,内容覆盖了Java的基本语法结构、Java的面向对象特征、Java集合框架体系、Java泛型、异常处理、Java GUI编程、JDBC数据库编程、Java注释、Java的IO流体系、Java多线程编程、Java网络通信编程和Java反射机制。覆盖了java.lang、java.util、java.text、java.io和java.nio、java.sql、java.awt、javax.swing包下绝大部分类和接口。

重点介绍了Java 9的模块化系统,还详细介绍了Java 9的jshell工具、多版本JAR包、匿名内部类的菱形语法、增强的try语句、私有接口方法,以及Java 9新增的各种API功能。

并不单纯从知识角度来讲解Java,而是从解决问题的角度来介绍Java语言,涉及大量实用案例开发:五子棋游戏、梭哈游戏、仿QQ的游戏大厅、MySQL企业管理器、仿EditPlus的文本编辑器、多线程、断点下载工具、Spring框架的IoC容器……这些案例既能巩固每章的知识,又可以学以致用,激发编程自豪感,进而引爆内心的编程激情。


《Java程序员面试笔试真题与解析》PDF,354页,带书签目录,文字可以复制。
《Java程序员面试笔试宝典》PDF,349页,带书签目录,文字可以复制。
配套《Java程序员面试笔试宝典》附录答案与勘误,28页,文字可以复制。

下载: https://pan.baidu.com/s/1hgGiKYlP9SNPJHzHEn6tGg 

提取码: 138m

 

《Java程序员面试笔试宝典》除了对传统的计算机相关知识(Java语言基础知识、Web基础知识、数据结构与算法、操作系统、计算机网络与通信、数据库、设计模式等)以及面试笔试真题进行分析与解答外,还根据当前计算机技术的发展潮流,对面试笔试中常见的海量数据处理进行了详细地分析。

 

转载于:https://www.cnblogs.com/cjeypy/p/10987434.html

重构,一言以蔽之,就是在不改变外部行为前提下,有条不紊地改善代码。多年前,正是本书原,使重构终于从编程高手们小圈子走出,成为众多普通程序员日常开发工作中不可或缺一部分。本书也因此成为与设计模式齐名经典著作,被译为中、德、俄、日等众多语言,在世界范围内畅销不衰。 本书凝聚了软件开发社区专家多年摸索而获得宝贵经验,拥有不因时光流逝而磨灭价值。今天,无论是重构本身,业界对重构理解,还是开发工具对重构支持力度,都与本书最初出时不可同日而语,但书中所蕴涵意味和精华,依然值得反复咀嚼,而且往往能够常读常新。 1章 重构一个案例 1.1 起点 1.2 重构一步 1.3 分解并重组statement() 1.4 运用多态取代与价格相关条件逻辑 1.5 结语 2重构原则 2.1 何谓重构 2.2 为何重构 2.3 何时重构 2.4 怎么对经理说 2.5 重构难题 2.6 重构设计 2.7 重构与性能 2.8 重构起源何处 3章 代码坏味道 3.1 Duplicated Code(重复代码) 3.2 Long Method(过长函数) 3.3 Large Class(过大类) 3.4 Long Parameter List(过长参数列) 3.5 Divergent Change(发散式变化) 3.6 Shotgun Surgery(霰弹式修改) 3.7 Feature Envy(依恋情结) 3.8 Data Clumps(数据泥团) 3.9 Primitive Obsession(基本类型偏执) 3.10 Switch Statements(switch惊悚现身) 3.11 Parallel InheritanceHierarchies(平行继承体系) 3.12 Lazy Class(冗赘类) 3.13 Speculative Generality(夸夸其谈未来性) 3.14 Temporary Field(令人迷惑暂时字段) 3.15 Message Chains(过度耦合消息链) 3.16 Middle Man(中间人) 3.17 Inappropriate Intimacy(狎昵关系) 3.18 Alternative Classes with Different Interfaces(异曲同工类) 3.19 Incomplete Library Class(不完美库类) 3.20 Data Class(纯稚数据类) 3.21 Refused Bequest(被拒绝遗赠) 3.22 Comments(过多注释) 4章 构筑测试体系 4.1 自测试代码价值 4.2 JUnit测试框架 4.3 添加更多测试 5章 重构列表 5.1 重构记录格式 5.2 寻找引用点 5.3 这些重构手法有多成熟 6章 重新组织函数 6.1 Extract Method(提炼函数) 6.2 Inline Method(内联函数) 6.3 Inline Temp(内联临时变量) 6.4 Replace Temp with Query(以查询取代临时变量) 6.5 Introduce Explaining Variable(引入解释性变量) 6.6 Split Temporary Variable(分解临时变量) 6.7 Remove Assignments to Parameters(移除对参数赋值) 6.8 Replace Method with Method Object(以函数对象取代函数) 6.9 Substitute Algorithm(替换算法) 7章 在对象之间搬移特性 7.1 Move Method(搬移函数) 7.2 Move Field(搬移字段) 7.3 Extract Class(提炼类) 7.4 Inline Class(将类内联化) 7.5 Hide Delegate(隐藏“委托关系”) 7.6 Remove Middle Man(移除中间人) 7.7 Introduce Foreign Method(引入外加函数) 7.8 Introduce Local Extension(引入本地扩展) 8章 重新组织数据 8.1 Self Encapsulate Field(自封装字段) 8.2 Replace Data Value with Object(以对象取代数据值) 8.3 Change Value to Reference(将值对象改为引用对象) 8.4 Change Reference to Value(将引用对象改为值对象) 8.5 Replace Array with Object(以对象取代数组) 8.6 Duplicate Observed Data(复制“被监视数据”) 8.7 Change Unidirectional Association to Bidirectional(将单向关联改为双向关联) 8.8 Change Bidirectional Association to Unidirectional(将双向关联改为单向关联) 8.9 Replace Magic Number with Symbolic Constant(以字面常量取代魔法数) 8.10 Encapsulate Field(封装字段) 8.11 Encapsulate Collection(封装集合) 8.12 Replace Record with Data Class(以数据类取代记录) 8.13 Replace Type Code with Class(以类取代类型码) 8.14 Replace Type Code with Subclasses(以子类取代类型码) 8.15 Replace Type Code with State/Strategy(以State/Strategy取代类型码) 8.16 Replace Subclass with Fields(以字段取代子类) 9章 简化条件表达式 9.1 Decompose Conditional(分解条件表达式) 9.2 Consolidate Conditional [removed]合并条件表达式) 9.3 Consolidate Duplicate Conditional Fragments(合并重复条件片段) 9.4 Remove Control Flag(移除控制标记) 9.5 Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式) 9.6 Replace Conditional with Polymorphism(以多态取代条件表达式) 9.7 Introduce Null Object(引入Null对象) 9.8 Introduce Assertion(引入断言) 10章 简化函数调用 10.1 Rename Method(函数改名) 10.2 Add Parameter(添加参数) 10.3 Remove Parameter(移除参数) 10.4 Separate Query from Modifier(将查询函数和修改函数分离) 10.5 Parameterize Method(令函数携带参数) 10.6 Replace Parameter with Explicit Methods(以明确函数取代参数) 10.7 Preserve Whole Object(保持对象完整) 10.8 Replace Parameter with Methods(以函数取代参数) 10.9 Introduce Parameter Object(引入参数对象) 10.10 Remove Setting Method(移除设值函数) 10.11 Hide Method(隐藏函数) 10.12 Replace Constructor with Factory Method(以工厂函数取代构造函数) 10.13 Encapsulate Downcast(封装向下转型) 10.14 Replace Error Code with Exception(以异常取代错误码) 10.15 Replace Exception with Test(以测试取代异常) 11章 处理概括关系 11.1 Pull Up Field(字段上移) 11.2 Pull Up Method(函数上移) 11.3 Pull Up Constructor Body(构造函数本体上移) 11.4 Push Down Method(函数下移) 11.5 Push Down Field(字段下移) 11.6 Extract Subclass(提炼子类) 11.7 Extract Superclass(提炼超类) 11.8 Extract Interface(提炼接口) 11.9 Collapse Hierarchy(折叠继承体系) 11.10 Form Tem Plate Method(塑造模板函数) 11.11 Replace Inheritance with Delegation(以委托取代继承) 11.12 Replace Delegation with Inheritance(以继承取代委托) 12章 大型重构 12.1 Tease Apart Inheritance(梳理并分解继承体系) 12.2 Convert Procedural Design to Objects(将过程化设计转化为对象设计) 12.3 Separate Domain from Presentation(将领域和表述/显示分离) 12.4 Extract Hierarchy(提炼继承体系) 13章 重构,复用与现实 13.1 现实检验 13.2 为什么开发者不愿意重构他们程序 13.3 再论现实检验 13.4 重构资源和参考资料 13.5 从重构联想到软件复用和技术传播 13.6 小结 13.7 参考文献 14章 重构工具 14.1 使用工具进行重构 14.2 重构工具技术标准 14.3 重构工具实用标准 14.4 小结 15章 总结 参考书目 要点列表 索引
1章 重构一个案例 1.1 起点 1.2 重构一步 1.3 分解并重组Statemen 1.4 运用多态取代与价格相关条件逻辑 1.5 结语 2重构原则 2.1 何谓重构 2.2 为何重构 2.3 何时重构 2.4 怎么对经理说 2.5 重构难题 2.6 重构设计 2.7 重构与性能 2.8 重构起源何处 3章 代码坏味道 3.1 Duplicated Code(重复代码) 3.2 Long Method(过长函数) 3.3 Large Class(过大类) 3.4 Long Parameter List(过长参数列) 3.5 Divergent Change(发散式变化) 3.6 Shortgun Surgery(霰弹式修改) 3.7 Feature Envy(依恋情结) 3.8 Data Clumps(数据泥团) 3.9 Primitive Obsession(基本型别偏执) 3.10 Switch Statements(switch惊悚现身) 3.11 Parallel Inheritance Hierarchies(平行继承体系) 3.12 Lazy Class(冗赘类) 3.13 Speculative Generality(夸夸其谈未来性) 3.14 Temporary Field(令人迷惑暂时值域) 3.15 Message Chai (过度耦合消息链) 3.16 Middle Man(中间转手人) 3.17 Inappropriate Intimacy(狎昵关系) 3.18 Alternative Classes with Different Interfaces(异曲同工类) 3.19 Incomplete Library Class(不完善程序库类) 3.20 Data Class(纯稚数据类) 3.21 Refused Bequest(被拒绝遗赠) 3.22 Comments(过多注释) 4章 建立测试体系 4.1 自我测试码价值 4.2 JUnit测试框架 4.3 添加更多测试 5章 重构名录 5.1 重构记录格式 5.2 寻找引用点 5.3 这些重构准则有多成熟 6章 重新组织你函数 6.1 Extract Method(提炼函数) 6.2 Inline Method(将函数内联化) 6.3 Inline Temp(将临时变量内联化) 6.4 Replace Temp With Query(以查询取代临时变量) 6.5 Introduce Explaining Variable(引入解释性变量) 6.6 Split Temporary Variable(剖解临时变量) 6.7 Remove Assignments to Paramete (移除对参数赋值动作) 6.8 Replace Method with Method Object(以函数对象取代函数) 6.9 Substitute Algorithm(替换你算法) 7章 在对象之间移动特性 7.1 Move Method(搬移函数) 7.2 Move Field(搬移值域) 7.3 Extract Class(提炼类) 7.4 Inline Class(将类内联化) 7.5 Hide Delegate(隐藏「委托关系」) 7.6 Remove Middle Man(移除中间人) 7.7 Introduce Foreign Method(引入外加函数) 7.8 Introduce Local Exte ion(引入本地扩展) 8章 重新组织你数据 8.1 Self Encapsulate Field(自封装值域) 8.2 Replace Data Value with Object(以对象取代数据值) 8.3 Change Value to Reference(将实值对象改为引用对象) 8.4 Change Reference to Value(将引用对象改为实值对象) 8.5 Replace Array with Object(以对象取代数组) 8.6 Duplicate Observed Data(复制「被监视数据」) 8.7 Change Unidirectional Association to Bidirectional(将单向关联改为双向) 8.8 Change Bidirectional Association to Unidirectional(将双向关联改为单向) 8.9 Replace Magic Number with Symbolic Co tant (以符号常量/字面常量 取代魔法数) 8.10 Encapsulate Field(封装值域) 8.11 Encapsulate Collection(封装群集) 8.12 Replace Record with Data Class(以数据类取代记录) 8.13 Replace Type Code with Class(以类取代型别码) 8.14 Replace Type Code with Subclasses (以子类取代型别码) 8.15 Replace Type Code with State/Strategy (以State/Strategy取代型别码) 8.16 Replace Subclass with Fields(以值域取代子类) 9章 简化条件表达式 9.1 Decompose Conditional(分解条件式) 9.2 Co olidate Conditional Expression(合并条件式) 9.3 Co olidate Duplicate Conditional Fragments (合并重复条件片段) 9.4 Remove Control Flag(移除控制标记) 9.5 Replace Nested Conditional with Guard Clauses (以卫语句取代嵌套条件式) 9.6 Replace Conditional with Polymorphism(以多态取代条件式) 9.7 Introduce Null Object(引入Null对象) 9.8 Introduce Assertion(引入断言) 10章 简化函数呼叫 10.1 Rename Method(重新命名函数) 10.2 Add Parameter(添加参数) 10.3 Remove Parameter(移除参数) 10.4 Separate Query from Modifier(将查询函数和修改函数分离) 10.5 Parameterize Method(令函数携带参数) 10.6 Replace Parameter with Explicit Methods(以明确函数取代参数) 10.7 Preserve Whole Object(保持对象完整) 10.8 Replace Parameter with Method(以函数取代参数) 10.9 Introduce Parameter Object(引入参数对象) 10.10 Remove Setting Method(移除设值函数) 10.11 Hide Method(隐藏你函数) 10.12 Replace Co tructor with Factory Method(以工厂方法取代构造函数) 10.13 Encapsulate Downcast(封装「向下转型」动作) 10.14 Replace Error Code with Exception(以异常取代错误码) 10.15 Replace Exception with Test(以测试取代异常) 11章 处理概括关系 11.1 Pull Up Field(值域上移) 11.2 Pull Up Method(函数上移) 11.3 Pull Up Co tructor Body(构造函数本体上移) 11.4 Push Down Method(函数下移) 11.5 Push Down Field(值域下移) 11.6 Extract Subclass(提炼子类) 11.7 Extract Superclass(提炼超类) 11.8 Extract Interface(提炼接口) 11.9 Collapse Hierarchy(折叠继承体系) 11.10 Form Template Method(塑造模板函数) 11.11 Replace Inheritance with Delegation(以委托取代继承) 11.12 Replace Delegation with Inheritance(以继承取代委托) 12章 大型重构 12.1 Tease Apart Inheritance(疏理并分解继承体系) 12.2 Convert Procedural Design to Objects(将过程化设计转化为对象设计) 12.3 Separate Domain from Presentation(将领域和表述/显示分离) 12.4 Extract Hierarchy(提炼继承体系) 13章 重构,复用,与现实 13.1 现实检验 13.2 为什么开发者不愿意重构他们程序 13.3 再论现实检验 13.4 重构资源和参考数据 13.5 从重构联想到软件复用和技术传播 13.6 结语 13.7 参考文献 14章 重构工具 14.1 使用工具进行重构 14.2 重构工具技术标准 14.3 重构工具实用标准 14.4 小结 15章 总结 参考书目 要点列表 索引
1章 重构一个案例1 1.1 起点1 1.2 重构一步7 1.3 分解并重组statement()8 1.4 运用多态取代与价格相关条件逻辑34 1.5 结语52 2重构原则53 2.1 何谓重构53 2.2 为何重构55 2.3 何时重构57 2.4 怎么对经理说60 2.5 重构难题62 2.6 重构设计66 2.7 重构与性能69 2.8 重构起源何处71 3章 代码坏味道75 3.1 DuplicatedCode(重复代码)76 3.2 LongMethod(过长函数)76 3.3 LargeClass(过大类)78 3.4 LongParameterList(过长参数列)78 3.5 DivergentChange(发散式变化)79 3.6 ShotgunSurgery(霰弹式修改)80 3.7 FeatureEnvy(依恋情结)80 3.8 DataClumps(数据泥团)81 3.9 PrimitiveObsession(基本类型偏执)81 3.10 SwitchStatements(switch惊悚现身)82 3.11 ParallelInheritanceHierarchies(平行继承体系)83 3.12 LazyClass(冗赘类)83 3.13 SpeculativeGenerality(夸夸其谈未来性)83 3.14 TemporaryField(令人迷惑暂时字段)84 3.15 MessageChains(过度耦合消息链)84 3.16 MiddleMan(中间人)85 3.17 InappropriateIntimacy(狎昵关系)85 3.18 AlternativeClasseswithDifferentInterfaces(异曲同工类)85 3.19 IncompleteLibraryClass(不完美库类)86 3.20 DataClass(纯稚数据类)86 3.21 RefusedBequest(被拒绝遗赠)87 3.22 Comments(过多注释)87 4章 构筑测试体系89 4.1 自测试代码价值89 4.2 JUnit测试框架91 4.3 添加更多测试97 5章 重构列表103 5.1 重构记录格式103 5.2 寻找引用点105 5.3 这些重构手法有多成熟106 6章 重新组织函数109 6.1 ExtractMethod(提炼函数)110 6.2 InlineMethod(内联函数)117 6.3 InlineTemp(内联临时变量)119 6.4 ReplaceTempwithQuery(以查询取代临时变量)120 6.5 IntroduceExplainingVariable(引入解释性变量)124 6.6 SplitTemporaryVariable(分解临时变量)128 6.7 RemoveAssignmentstoParameters(移除对参数赋值)131 6.8 ReplaceMethodwithMethodObject(以函数对象取代函数)135 6.9 SubstituteAlgorithm(替换算法)139 7章 在对象之间搬移特性141 7.1 MoveMethod(搬移函数)142 7.2 MoveField(搬移字段)146 7.3 ExtractClass(提炼类)149 7.4 InlineClass(将类内联化)154 7.5 HideDelegate(隐藏“委托关系”)157 7.6 RemoveMiddleMan(移除中间人)160 7.7 IntroduceForeignMethod(引入外加函数)162 7.8 IntroduceLocalExtension(引入本地扩展)164 8章 重新组织数据169 8.1 SelfEncapsulateField(自封装字段)171 8.2 ReplaceDataValuewithObject(以对象取代数据值)175 8.3 ChangeValuetoReference(将值对象改为引用对象)179 8.4 ChangeReferencetoValue(将引用对象改为值对象)183 8.5 ReplaceArraywithObject(以对象取代数组)186 8.6 DuplicateObservedData(复制“被监视数据”)189 8.7 ChangeUnidirectionalAssociationtoBidirectional(将单向关联改为双向关联)197 8.8 ChangeBidirectionalAssociationtoUnidirectional(将双向关联改为单向关联)200 8.9 ReplaceMagicNumberwithSymbolicConstant(以字面常量取代魔法数)204 8.10 EncapsulateField(封装字段)206 8.11 EncapsulateCollection(封装集合)208 8.12 ReplaceRecordwithDataClass(以数据类取代记录)217 8.13 ReplaceTypeCodewithClass(以类取代类型码)218 8.14 ReplaceTypeCodewithSubclasses(以子类取代类型码)223 8.15 ReplaceTypeCodewithState/Strategy(以State/Strategy取代类型码)227 8.16 ReplaceSubclasswithFields(以字段取代子类)232 9章 简化条件表达式237 9.1 DecomposeConditional(分解条件表达式)238 9.2 ConsolidateConditionalExpression(合并条件表达式)240 9.3 ConsolidateDuplicateConditionalFragments(合并重复条件片段)243 9.4 RemoveControlFlag(移除控制标记)245 9.5 ReplaceNestedConditionalwithGuardClauses(以卫语句取代嵌套条件表达式)250 9.6 ReplaceConditionalwithPolymorphism(以多态取代条件表达式)255 9.7 IntroduceNullObject(引入Null对象)260 9.8 IntroduceAssertion(引入断言)267 10章 简化函数调用271 10.1 RenameMethod(函数改名)273 10.2 AddParameter(添加参数)275 10.3 RemoveParameter(移除参数)277 10.4 SeparateQueryfromModifier(将查询函数和修改函数分离)279 10.5 ParameterizeMethod(令函数携带参数)283 10.6 ReplaceParameterwithExplicitMethods(以明确函数取代参数)285 10.7 PreserveWholeObject(保持对象完整)288 10.8 ReplaceParameterwithMethods(以函数取代参数)292 10.9 IntroduceParameterObject(引入参数对象)295 10.10 RemoveSettingMethod(移除设值函数)300 10.11 HideMethod(隐藏函数)303 10.12 ReplaceConstructorwithFactoryMethod(以工厂函数取代构造函数)304 10.13 EncapsulateDowncast(封装向下转型)308 10.14 ReplaceErrorCodewithException(以异常取代错误码)310 10.15 ReplaceExceptionwithTest(以测试取代异常)315 11章 处理概括关系319 11.1 PullUpField(字段上移)320 11.2 PullUpMethod(函数上移)322 11.3 PullUpConstructorBody(构造函数本体上移)325 11.4 PushDownMethod(函数下移)328 11.5 PushDownField(字段下移)329 11.6 ExtractSubclass(提炼子类)330 …… 12章 大型重构359 13章 重构,复用与现实379 14章 重构工具401 15章 总结409 参考书目413 要点列表417 索引419

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值