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