有時你會看到這樣的對象:其內某個instance變量僅為某種特定情勢而設。這樣的代碼讓人不易理解,因為你通常認為對象在所有時候都需要它的所有變量。在變量未被使用的情況下猜測當初其設置目的,會讓你發瘋。
請使用Extract Class(149)給這個可憐的孤兒創造一個家,然后把所有和這個變量相關的代碼都放進這個新家。也許你還可以使用Introduce Null Object(260)在[變量不合法]的情況下創建一個null對象,從而避免寫出[條件式代碼]。
如果class中有一個復雜算法,需要好幾個變量,往往就可能導致壞味道Temporary Field的出現。由于實現者不希望傳遞一長串參數(想想為什么),所以他把這些參數都放進值域(fields)中。但是這些值域只在使用該算法時才有效,其他情況下只會讓人迷惑。這時候你可以利用Extract Class(149)把這些變量和其相關函數提煉到一個獨立class中。提煉后的新對象將時一個method object[Beck](譯注:其存在只是為了提供調用函數的途徑,class本身并無抽象意味)。