第1章 本书的写作缘由

第2章 重构

第3章 模式

第4章 代码坏味

第5章 模式导向的重构目录

第6章 创建

第7章 简化

第8章 泛化

第9章 保护

第10章 聚集操作

第11章 实用重构

参考文献

第1章 本书的写作缘由

  1.1 过渡设计

  1.2 模式万灵丹

  1.3 设计不足

  1.4 测试驱动开发和持续重构

  1.5 重构与模式

  1.6 演进式设计

第2章 重构

  2.1 何谓重构

  2.2 重构的动机

  2.3 众目睽睽

  2.4 可读性好的代码

  2.5 保持清晰

  2.6 循序渐进

  2.7 设计欠账

  2.8 演变出新的架构

  2.9 复合重构与测试驱动的重构

  2.10 复合重构的优点

  2.11 重构工具

第3章 模式

  3.1 何谓模式

  3.2 模式痴迷

  3.3 实现模式的方式不止一种

  3.4 通过重构实现,趋向和去除模式

  3.5 模式是否会使代码更加复杂

  3.6 模式知识

  3.7 使用模式的预先设计

第4章 代码坏味

  4.1 重复代码 (Duplicated Code)

  4.2 过长函数 (Long Method)

  4.3 条件逻辑太复杂 (Conditional Complexity)

  4.4 基本类型偏执 (Primitive Obsession)

  4.5 不恰当的暴露 (Indecent Exposure)

  4.6 解决方案蔓延 (Solution Sprawl)

  4.7 异曲同工的类 (Alternative Classes with Different Interfaces)

  4.8 冗赘类 (Lazy Class)

  4.9 过大的类 (Large Class)

  4.10 分支语句 (Switch Statement)

  4.11 组合爆炸 (Combinatorial Explosion)

  4.12 怪异解决方案 (Oddball Solution)

第5章 模式导向的重构目录

  5.1 重构的格式

  5.2 本目录中的引用的项目

    5.2.1 XML Builder

    5.2.2 HTML Parser

    5.2.3 贷款风险计算程序

  5.3 起点

  5.4 学习顺序

第6章 创建

  6.1 用Creation Method 替换构造函数

    6.1.1 动机

    6.1.2 做法

    6.1.3 示例

    6.1.4 变体

  6.2 将创建知识搬移到Factory

    6.2.1 动机

    6.2.2 做法

    6.2.3 示例

  6.3 用Factory封装类

    6.3.1 动机

    6.3.2 做法

    6.3.3 示例

    6.3.4 变体

  6.4 用Factory Method引入多态创建

    6.4.1 动机

    6.4.2 做法

    6.4.3 示例

  6.5 用Builder封装Composite

    6.5.1 做法

    6.5.2 示例

    6.5.3 变体

  6.6 内联Singleton

    6.6.1 动机

    6.6.2 做法

    6.6.3 示例

第7章 简化

  7.1 组合方法

    7.1.1 动机

    7.1.2 做法

    7.1.3 示例

  7.2 用Strategy 替换条件逻辑

    7.2.1 动机

    7.2.2 做法

    7.2.3 示例

  7.3 将装饰功能搬移到Decorator

    7.3.1 动机

    7.3.2 做法

    7.3.3 示例

  7.4 用State替换状态改变条件语句

    7.4.1 动机

    7.4.2 做法

    7.4.3 示例

  7.5 用Composite替换隐含树

    7.5.1 动机

    7.5.2 做法

    7.5.3 示例

  7.6 用Command替换条件调度程序

    7.6.1 动机

    7.6.2 做法

    7.6.3 示例

第8章 泛化

  8.1 形成Template Method

    8.1.1 动机

    8.1.2 做法

    8.1.3 示例

  8.2 提取Composite

    8.2.1 动机

    8.2.2 做法

    8.2.3 示例

  8.3 用Composite替换一/多之分

    8.3.1 动机

    8.3.2 做法

    8.3.3 示例

  8.4 用Observer 替换硬编码的通知

    8.4.1 动机

    8.4.2 做法

    8.4.3 示例

  8.5 通过Adapter统一接口

    8.5.1 动机

    8.5.2 做法

    8.5.3 示例

  8.6 提取Adapter

    8.6.1 动机

    8.6.2 做法

    8.6.3 示例

    8.6.4 变体

  8.7 用Interpreter替换隐式语言

    8.7.1 动机

    8.7.2 做法

    8.7.3 示例

第9章 保护

  9.1 用类替换类型代码

    9.1.1 动机

    9.1.2 做法

    9.1.3 示例

  9.2 用Singleton限制实例化

    9.2.1 动机

    9.2.2 做法

    9.2.3 示例

  9.3 引入Null Object

    9.3.1 动机

    9.3.2 做法

    9.3.3 示例

第10章 聚集操作

  10.1 将聚集操作搬移到Collecting Parameter

    10.1.1 动机

    10.1.2 做法

    10.1.3 示例

  10.2 将聚集操作搬移到Visitor

    10.2.1 动机

    10.2.2 做法

    10.2.3 示例

第11章 实用重构

  11.1 链构造函数

    11.1.1 动机

    11.1.2 做法

    11.1.3 示例

  11.2 统一接口

    11.2.1 动机

    11.2.2 做法

    11.2.3 示例

  11.3 提取参数

    11.3.1 动机

    11.3.2 做法

    11.3.3 示例

参考文献

Alexander, Christopher. A Pattern Language. New York: Oxford University Press, 1977.

Alexander, Christopher. A Timeless Way of Building. New York: Oxford University Press, 1979.

Anderson, Bruce. "Null Object." UIUC Patterns Discussion Mailing List (patterns@cs.uiuc.edu), January 1995.

Astels, David. Test-Driven Development, a Practical Guide. Upper Saddle River, NJ: Prentice Hall,2003.

Barzun, Jacques. Simple and Direct, 4th ed. New York: HarperCollins,2001.

Beck, Kent. Smalltalk Best Practice Patterns. Upper Saddle River, NJ: Prentice Hall, 1997.

Beck, Kent, Test-Driven Development. Boston, MA: Addison-Wesley, 2002

Beck, Kent, Extreme Programming Explained.Reading, MA: Addison-Wesley,1999.

Beck, Kent, and Erich Gamma. JUnit Testing Framework. Available online at  http://www.junit.org. See also Erich Gamma and Kent Beck, "JUnit: A Cook's Tour," Java Report, May 1999

Bloch, Joshua. Effective Java. Boston, MA: Addison-Wesley, 2001

Cunningham, Ward. "Checks: A Pattern Language of Infomation Integrity." In Pattern Languages of Program Desgin, eds. James O. Coplien and Douglas C. Schmidt. Reading, MA: Addison-Wesley, 1995

Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Reading, MA: Addison-Wesley,1995

Evans, Eric. Domain-Driven Design. Boston, MA: Addison-Wesley, 2003.

Foote, Brian, and Joseph Yoder. "Big Ball of Mud." In Pattern Language of Program Design IV, eds. Neil Harrison, Brian Foote, and Hans Rohnert. Boston, MA: Addison-Wesley,2000.

Fowler, Martin. Refactoring: Improving the Design of Existing Code. Boston, MA: Addison-Wesley, 2000

Fowler, Martin. Patterns of Enterprise Application Architecture. Boston, MA: Addison-Wesley, 2003

Fowler,Martin. UML Distilled,3rd ed. Boston, MA: Addison-Wesley,2003

Gamma,Erich, and Kent Beck. Contributing to Eclipse. Boston, MA: Addison-Wesley, 2003.

Kerievsky, Joshua. "Patterns & XP." In Extreme Programming Examined, eds. Giancarlo Succi and Michele Marchesi. Boston, MA: Addison-Wesley, 2001.

Parnas, David. "On the Criteria to Be Used in Decomposing Systems into Modules." Communications of the ACM, 15(2), 1972.

Roberts, Don, John Brant, and Ralph Johnson. "A Refactoring Tool for Smalltalk." Available online at http://st-www.cs.uiuc.edu/~droberts/tapos/TAPOS.htm

Solomon, Maynard. Mozart. New York: HarperCollins, 1995

Vlissides, John. "C++ Report." April 1998. Available online at http://www.research.ibm.com/designpatterns/pubs/ph-apr98.pdf

Woolf, Boddy. "The Null Object Pattern." In Pattern Languages of Program Design III, eds. Robert C.Martin, Dirk Riehle, and Frank Buschmann. Reading, MA: Addison-Wesley,1997.

重构与模式 (Joshua Kerievsky 著)的更多相关文章

  1. 重构与模式(Refactoring to Patterns)-读书笔记

    第一章 ☛过度设计:是指代码的灵活性和复杂性超出所需. 第二章 ☛重构是一种保持行为的转换. 第三章 ☛每一个模式都是由三部分组成的规则,他表达的是某一环境,一个问题以及解决问题的方案之间的关系. ☛ ...

  2. Java重构-策略模式、状态模式、卫语句

    前言 当代码中出现多重if-else语句或者switch语句时.弊端之一:如果这样的代码出现在多处,那么一旦出现需求变更,就需要把所有地方的if-else或者switch代码进行更改,要是遗漏了某一处 ...

  3. 【转】Java重构-策略模式、状态模式、卫语句

    前言 当代码中出现多重if-else语句或者switch语句时.弊端之一:如果这样的代码出现在多处,那么一旦出现需求变更,就需要把所有地方的if-else或者switch代码进行更改,要是遗漏了某一处 ...

  4. [重构到模式-Chain of Responsibility Pattern]把Fizz Buzz招式重构到责任链模式

    写一段程序从1打印到100,但是遇到3的倍数时打印Fizz,遇到5的倍数时打印Buzz,遇到即是3的倍数同时也是5的倍数时打印FizzBuzz.例如: 1 2 Fizz 4 Buzz Fizz 7 8 ...

  5. 面向对象设计模式纵横谈:Singelton单件模式(笔记记录)

       李建忠老师讲的<面向对象设计模式纵横谈>,早就看过了,现在有了时间重新整理一下,以前的博客[赛迪网]没有了,现在搬到博客园,重新过一遍,也便于以后浏览. 设计模式从不同的角度分类会得 ...

  6. 重构遗留程序的一次案例学习(java程序)

    遗留代码经常是腐臭的,每个优秀的开发者都想把它重构.而进行重构的一个理想的先决条件是,它应该包含一组单元测试用例,以避免产生回归缺陷.但是为遗留代码编写单元测试可不是件容易的事,因为它经常是一团糟.要 ...

  7. Singleton patterns 单件(创建型模式)

    1.模式分类 1.1  从目的来看: •      – 创建型(Creational)模式:负责对象创建. •      – 结构型(Structural)模式:处理类与对象间的组合. •      ...

  8. 从西直门立交桥谈IT架构与重构(干货)

    2015年8月13日 PM 20:00 Neeke君从一个战场奔赴至另一个战场,回到办公室,打开电脑,登陆微信,精彩的的微社群分享马上就要开始了! 大家好,我是Neeke,中文名高驰涛,PHP开发组成 ...

  9. 重构:用Command替换条件调度程序

    注:该随笔受启发于 <重构与模式>  第七章 第7.6小节 用Command替换条件调度程序 . 对于Command不做过多解释,这里我找了两个例子.供部分园友参阅:Command例子1  ...

随机推荐

  1. centos安装nodejs并配置生产环境,基于pm2

    安装nodejs和yarn的命令: curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum. ...

  2. vscode源码分析【二】程序的启动逻辑,第一个窗口是如何创建的

    上一篇文章:https://www.cnblogs.com/liulun/ (小广告:我做的开源免费的,个人知识管理及自媒体营销工具“想学吗”:https://github.com/xland/xia ...

  3. 从Python安装到语法基础,这才是初学者都能懂的爬虫教程

    Python和PyCharm的安装:学会Python和PyCharm的安装方法 变量和字符串:学会使用变量和字符串的基本用法 函数与控制语句:学会Python循环.判断语句.循环语句和函数的使用 Py ...

  4. TypeScript + Webpack 4 开发环境搭建(转)

    前段时间接触到 Microsoft 的 Microsoft.AspNetCore.SpaTemplates 模板,生成的项目使用的默认语言是 TypeScript,虽然以前在此之前并没有用过TypeS ...

  5. python做中学(二)bool()函数的用法

    定义: bool() 函数用于将给定参数转换为布尔类型,如果没有参数,返回 False. bool 是 int 的子类. 语法: 以下是 bool() 方法的语法: class bool([x] 参数 ...

  6. Python 爬虫介绍,什么是爬虫,如何学习爬虫?

    ​ 作为程序员,相信大家对“爬虫”这个词并不陌生,身边常常会有人提这个词,在不了解它的人眼中,会觉得这个技术很高端很神秘.不用着急,我们的爬虫系列就是带你去揭开它的神秘面纱,探寻它真实的面目. 爬虫是 ...

  7. SQLServer某个库log日志过大,无法收缩日志文件 ,因为该文件结尾的逻辑日志文件正在使用

    问题描述: 今天看到user库日志备份方面很久,然后查看到user库这个log日志很大 图片是我已经解决了,然后现在可以收缩的大小 解决方法: 1.先备份user库日志,因为很大,所以要等很久,这个只 ...

  8. 用户和登录的ID、Name和SID

    SQL Server的安全主体主要分为Login.User和Role,不仅有ID属性,还有Name属性和SID属性,SID是指Security ID.在查看用户和登录的时候,受到模拟上下文的影响.当执 ...

  9. solidity定长数组和动态数组

    固定长度的数组 固定长度数组声明 直接在定义数组的时候声明固定长度数组的值: uint[5] fixedArr = [1,2,3,4,5]; 可通过数组的length属性来获得数组的长度,进而进行遍历 ...

  10. 如何在CAD中批量打印图纸?这种方法你要知道

    CAD图纸都是使用CAD制图软件进行设计出来的,图纸的格式均为dwg格式的,不方便进行使用.就需要将图纸进行打印出来.多张CAD图纸如果一张一张进行打印速度就会非常的慢,那就可以使用CAD中的批量打印 ...