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