來源:http://www.cnblogs.com/light/archive/2004/07/27/27790.html
請注意這兩個(gè)模式的區(qū)別,在于一個(gè)關(guān)注行為,而另一個(gè)關(guān)注結(jié)構(gòu)。Singleton模式強(qiáng)調(diào)結(jié)構(gòu)上的單一性。它防止創(chuàng)建多個(gè)對象實(shí)例。相反,Monostate模式則強(qiáng)制行為上的單一性,而沒有加強(qiáng)結(jié)構(gòu)方面的限制。為了強(qiáng)調(diào)這個(gè)區(qū)別,請考慮如下事實(shí):Monostate的測試用例對Singleton類是有效的,但是Singleton的測試用例對卻遠(yuǎn)不適用于Monostate類。
Monostate模式的好處在于:
透明性:使用Monstate對象和使用常規(guī)(regular)對象沒有什么區(qū)別。使用者不需要知道對象是Monostate。
可派生性:Monostate的派生類都是Monostate。事實(shí)上,Monostate的所有派生類都是同一個(gè)Monostate的一部分。它們共享相同的靜態(tài)變量。
多態(tài)性:同于Monostate的方式不是靜態(tài)的,所以可以在使用派生類中覆寫它們。因此,不同的派生類可以基于相同的靜態(tài)變量表現(xiàn)出不同的行為。
Monostate模式的代價(jià)在于:
不可轉(zhuǎn)換性:不能透過派生類把常規(guī)類轉(zhuǎn)換成Monostate類。
效率問題:因?yàn)镸onostate是真正的對象,所以會導(dǎo)致許多的創(chuàng)建和摧毀開銷。
內(nèi)存占用:即使從未使用Monostate,它的變量也要占據(jù)內(nèi)存空間。
平臺局限性:Monostate不能跨多個(gè)JVM或者多個(gè)平臺工作。
以我的經(jīng)驗(yàn)來看Monostate模式的使用應(yīng)該是一種比較自然的,不過我開發(fā)了幾年還真的沒有遇到過這種這種類似于有限機(jī)的應(yīng)用。