甜心奶酪的专栏

待到秋来九月八,我花开后百花杀; 冲天香阵透长安,满城尽带黄金甲。

Introduce Null Object(引入Null对象)

需要再三检查某物是否为null value。将null value (无效值)替换为 null object(无效对象)。if (customer == null) plan = BillingPlan.basic();else plan = customer.getPlan();==〉动机多态的...

2009-02-19 17:14:00

阅读数:1584

评论数:4

Replace Conditional with Polymorphism(以多态取代条件式)

你手上有个条件式,它根据对象型别的不同而选择不同的行为。将这个条件式的每个分支放进一个subclass内的覆写函数中,然后将原始函数声明为抽象函数。double getSpeed() {switch (_type) {case EUROPEAN:return getBaseSpeed();case...

2009-02-18 14:11:00

阅读数:1419

评论数:1

Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件式)

函数中的条件逻辑,使人难以看清正常的执行路径。使用卫语句表现所有特殊情况。double getPayAmount() {double result;if (_isDead) result = deadAmount();else {if (_isSeparated) result = separat...

2009-02-18 11:14:00

阅读数:1636

评论数:0

Remove Control Flag(移除控制标记)

在一系列表达式中,某个变量带有控制标记的作用以break语句或return语句取代控制标记动机在一系列条件表达式中,你常常会用到[用以何时停止条件检查]的控制标记。set done to falsewhile not doneif (condition)do somethingset done t...

2009-02-17 11:08:00

阅读数:729

评论数:0

Consolidate Duplicate Conditional Fragments(合并重复的条件片断)

在条件式的每个分支上有着相同一段的代码。将这段重复代码搬移到条件式之外。if (isSpecialDeal()) {total = price * 0.95;send();}else {total = price * 0.98;send();}if (isSpecialDeal())total =...

2009-02-16 10:30:00

阅读数:383

评论数:0

Consolidate Conditional Expression(合并条件式)

你有一系列条件测试,都得到相同结果。将这些测试合并为一个条件式,并将这个条件式提炼成为一个独立函数。double disabilityAmount() {if (_seniority if (_monthsDisabled > 12) return 0;if (_isPartTime) re...

2009-02-13 14:53:00

阅读数:544

评论数:0

Decompose Conditional(分解条件式 )

有一个复杂的(if-then-else)语句。从if-then-else三个段落中分别提炼出独立的函数f(date.before(SUMMER_START) || date.after(SUMMER_END))    charge=quantity*_winterRate+_winterServi...

2009-02-13 09:29:00

阅读数:702

评论数:0

Replace Subclass with Fields(以值域取代子类)

你的各个class的唯一差别只在[返回常量数据]的函数身上。修改这些函数,使它们返回superclass中的某个(新增)值域,然后销毁subclasses。  动机建立subclass的目的,是为了增加新特性或变化其行为。有一种变化行为称为常量函数,它们会返回硬编码值。这东西有其用途,你可以对不同...

2009-02-12 16:02:00

阅读数:375

评论数:0

Replace Type Code with State/Strategy(以State/Strategy取代型别码)

你有一个type code,它会影响class的行为,但你无法使用subclassing.以state object(专门用来描述状态的对象)取代type code。动机本项重构和Replace Type Code with Subclasses很相似。但如果[type code值在对象生命期中发...

2009-02-11 14:22:00

阅读数:1624

评论数:0

Replace Type Code with Subclasses(以子类取代型别码)

你有一个不可变得type code,它会影响类的行为。以一个子类取代这个type code。动机如果一个type code不会影响行为,你可以使用Replace Type Code with Class;但是,如果一个type code会影响行为,最好的办法就是借助多态来处理变化的行为。一般来说,...

2009-02-09 09:04:00

阅读数:1398

评论数:2

Replace Type Code with Class(以类取代型别码)

class 中有一个数值型别码,但它不影响class的行为以一个新的class替换该数值型别码。class Person ...public static final int O = 0;public static final int A = 1;public static final int B...

2009-02-06 09:24:00

阅读数:719

评论数:0

Replace Record with Data Class(以数据类取代记录 )

需要面对传统编程环境中的记录结构。为该记录创建一个哑数据对象。动机需要面对一个老的程序,需要通过API和记录结构交流。或者处理从数据库中读出的记录。创建一个接口类,用来处理这些数据。最简单的做法先建立一个类似外部记录的类,以便日后将某些值域和函数搬移到这个类。还有一种情况,数组中的每个元素都有特定...

2009-02-05 10:28:00

阅读数:502

评论数:1

Encapsulate Collection(封装群集)

有个函数(method)返回一个群集(collection).让这个函数返回该群集的一个只读映件(read-only view),并在这个class中提供[添加/移除](add/remove)群集元素的函数. Person...    getCourse() :Set    setCourse(S...

2009-02-04 16:05:00

阅读数:728

评论数:0

Replace Magic Number with Symbolic Constant(以符号常量/字面常量取代魔法数)

你有一个字面数值(literal number),带有特殊含义创造一个常量,根据其意义为它命名,并将上述的字面数值替换为这个常量.double potentialEnergy(double mass, double height) {   return mass * 9.81 * height;}...

2009-02-02 09:13:00

阅读数:695

评论数:0

Change Bidirectional Association to Unidirectional(将双向关联改为单向)

两个classes之间有双向关联,但其中一个class如今不再需要另一个class的特性.去除不必要的关联(association). 动机双向关联(bidirectional associations)很有用,但你也必须为它付出代价,那就是[维护双向链接,确保对象被正确创建和删除]而增加的复杂度...

2009-01-24 09:03:00

阅读数:457

评论数:0

Change Unidirectional Association to Bidirectional(将单向关联改为双向)

两个classes都需要使用对方特性,但其间只有一条单向连接(one-way link)。添加一个反向,并使修改函数(modifiers)能够同时更新两条连接。(注译:这里的指针等同于句柄(handle),修改函数(modifier)指的是改变双方关系者) 动机开发初期,你可能会在两个classe...

2009-01-23 10:14:00

阅读数:726

评论数:0

Duplicate Observed Data(复制被监视数据)

注:所谓presentation class,用以处理[数据表现形式];所谓domain class,用以处理业务逻辑。你有一些domain data置身于GUI控件中,而domain method需要访问之。将该笔数据拷贝一个domain object中。建立一个Observer模式,用以对do...

2009-01-22 12:32:00

阅读数:656

评论数:0

Replace Array with Object(以对象取代数组)

你有一个数组(array),其中的元素各自代表不同的东西。 以对象替换数组。对于数组中的每个元素,以一个值域表示之。 String[] row = new String[3];row[0] = "Livepool";row[1] = "15"; ==〉 Pe...

2009-01-21 13:22:00

阅读数:507

评论数:0

Change Reference to Value(将引用对象改变为实值对象)

你有一个reference object(引用对象),很小且不可变(immutable),而且不易管理。将它变成一个value object(实值对象)。 动机在分布系统和并发系统中,不可变的value object特别有用,因为你不须考虑它们的同步问题。value object有一个非常重要的特...

2009-01-20 09:47:00

阅读数:624

评论数:0

Change Value to Reference(将实值对象改为引用对象)

你有一个class,衍生出许多相等实体(equal instances),你希望将它们替换为单一对象。将这个value object(实值对象)变成一个reference object(引用对象)。 动机在许多系统中,你都可以对对象做一个有用的分类:reference object和value o...

2009-01-19 09:42:00

阅读数:1011

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭