有时你会看到这样的对象:其内某个instance变量仅为某种特定情势而设。这样的代码让人不易理解,因为你通常认为对象在所有时候都需要它的所有变量。在变量未被使用的情况下猜测当初其设置目的,会让你发疯。
请使用Extract Class(149)给这个可怜的孤儿创造一个家,然后把所有和这个变量相关的代码都放进这个新家。也许你还可以使用Introduce Null Object(260)在[变量不合法]的情况下创建一个null对象,从而避免写出[条件式代码]。
如果class中有一个复杂算法,需要好几个变量,往往就可能导致坏味道Temporary Field的出现。由于实现者不希望传递一长串参数(想想为什么),所以他把这些参数都放进值域(fields)中。但是这些值域只在使用该算法时才有效,其他情况下只会让人迷惑。这时候你可以利用Extract Class(149)把这些变量和其相关函数提炼到一个独立class中。提炼后的新对象将时一个method object[Beck](译注:其存在只是为了提供调用函数的途径,class本身并无抽象意味)。