它只是乙個簡單的靜態方法,返回類的乙個例項.
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 設計模式領域的標準參考書 的清晰與整潔最為重要 模組的使用者永遠也不該被模組的行為所迷惑 那樣就不清晰了 模組要盡量的小,但又不能太小 本書使用的術語模組,是指任何可重用的軟體組織,從單個方法到包含多個包的複雜系統都可以是乙個模組 應該被重...