靜態工廠方法

2021-08-25 15:17:11 字數 1987 閱讀 3287

它只是乙個簡單的靜態方法,返回類的乙個例項.

1. 與建構函式不同,靜態工廠方法具有名字.選用適當名字的靜態工廠方法可以使乙個類更易於使用,並且相應的客戶**更易於閱讀.

2. 與建構函式不同,不要求非得建立乙個新的物件.這使得一些非可變類可以使用乙個預先構造好的例項,或者把已經構造好的例項緩衝起來.同時,靜態工廠方法可以為重複的呼叫返回同乙個物件,這也可以被用來控制"在某一時刻哪些例項應該存在." 好處1:使得乙個類可以保證是乙個singleton. 好處2:使非可變類可以保證"不會有兩個相等的例項存在",即當且僅當a==b時才有a.equals(b)為true.這可以提高效能.

3. 與建構函式不同,它們可以返回乙個原返回型別的子型別的物件.特別是,能夠返回實現類對於呼叫者隱藏的物件.這項技術非常適合於基於介面的框架結構,因為這樣的框架結構中,介面成為靜態工廠方法的自然返回型別.呼叫者只能通過介面來引用被返回的物件,而不能通過實現類來引用被返回的物件.

靜態工廠方法的命名包括getinstance和valueof,但這並不是強制要求的,只要具有明確的意義即可.

示例:public class complexnumber

//private constructor prevents subclassing

private complexnumber (float areal, float aimaginary)

private float freal;

private float fimaginary;

} jdk2中的示例:

logmanager.getlogmanager

public static logmanager getlogmanager()

return manager;

}pattern.compile

public static pattern compile(string regex)

collections.unmodifiablecollection, collections.synchronizecollection等等

public static collectionunmodifiablecollection(collection<? extends t> c)

public static collectionsynchronizedcollection(collectionc)

calendar.getinstance

public static calendar getinstance()

與reflection一起作用:

物件例項可以由user input,config file,或者任意**決定.

完全支援在runtime時決定需要的物件例項.

public class creator

// #2: parameted static factory method

protected final static int world = 1;

protected final static int camel = 2;

protected static hello createhelloer(int id)

if (id == 2)

return null;

}// #3: use reflection

protected static hello createhelloer(string name) catch (classnotfoundexception e) catch (instantiationexception e) catch (illegalacces***ception e)

return null;

}public static void main(string args)

}inte***ce hello

class helloworld implements hello

}class hellocamel implements hello

}

靜態工廠方法和例項工廠方法

在學習spring bean的例項化方式的時候遇到的乙個問題,spring bean例項化有3種方法 1 構造器生成 2 靜態工廠方法 3 例項工廠方法 那麼問題來了,什麼是靜態工廠方法,什麼是例項工廠方法?靜態工廠方法 顧名思義就是直接可以通過靜態方法來例項化乙個物件 如 public class...

C 簡單工廠 靜態工廠方法

定義 定義乙個工廠類,他可以根據引數的不同返回不同類的例項 在簡單工廠模式中用於被建立例項的方法通常為靜態 static 方法,因此簡單工廠模式又被成為靜態工廠方法 static factory method 需要什麼,只需要傳入乙個正確的引數,就可以獲取所需要的物件,而無需知道其實現過程 假設有乙...

EffectiveJava 一 靜態工廠方法

design pattern idiom gamma 95 設計模式領域的標準參考書 的清晰與整潔最為重要 模組的使用者永遠也不該被模組的行為所迷惑 那樣就不清晰了 模組要盡量的小,但又不能太小 本書使用的術語模組,是指任何可重用的軟體組織,從單個方法到包含多個包的複雜系統都可以是乙個模組 應該被重...