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