java integer 不变模式_Java代码的变与不变
哲學上說變與不變,講的是絕對運動與相對靜止的道理,在代碼設計中,也有許多變和不變之間的辯證故事。
有一些類在創建以后,整個生命周期內都不會發生變化,這種模式被稱為Immutable Pattern。
較弱的不變模式:指的是一個類的實例狀態是不可變化的,但是這個類的引用的實例卻可以變化。
比如說:Visitor模式常常是這樣的,整個流程是不可變的,但是我為我的整個流程提供靈活的切入點,提供出來訪問接口,供變化的部分完成。
較強的不變模式:一個類實例狀態不可變,其內部引用的所有實例也不可變。
這個就比較多了,JDK中的String、Integer、Byte等都是不可變的。
變化的場景需要考慮許多事情,因為變化帶來了“狀態”的概念。但正因為有了狀態,整個世界才豐富多彩。變化需要考慮共享訪問的情形,需要考慮狀態之間的關系。當我們享受到代碼變化帶來的愉悅,也開始追求不變的代碼,那一份古樸和單純。
不變,引伸出對象復用的好處來。無狀態的單例,很多場景下可以看作簡單的工具類;更多的對象在一定時期內無狀態,比如Prototype模式,比如線程池、緩存,這些都將哲學中的變與不變最終結合到代碼中去。不變,是快速的、簡單的、敏捷的,將變化的狀態連結起來了。
程序=算法+數據,算法是不變的,數據是可變的。仿佛從軟件的一開始,變與不變就給后續的萬事萬物埋下了伏筆,代碼的世界圍著這個特殊的視角旋轉。隨著動態語言的興盛,以往不可變的方法也可以被改變,方法本身也能變成對象,數據和算法輕而易舉地在代碼中變幻,我們越來越疑惑,還有什么不變的東西,可以讓我們徹底看清和相信一次?
Action是具備狀態的,線程獨立的;Service和DAO是無狀態的,是可以被池化的。不變得再極致一點,我希望從編譯之后它就是不變的,而不是對象創建之后不變,這就是方法。靜態語言中的方法邏輯本身就是不可變的;而另一方面,當方法內部所使用的一切變量,都嚴格被控制在方法內部的臨時變量或者按值傳遞的參數中,這說的,不正是函數式編程嗎?
也許,其實軟件的本質很簡單,我一直在思考,軟件復雜化的本質就是為了追求簡單的東西。就像這個變化莫測的世界,不變的故事,總是那么淅淅瀝瀝的,卻又驚人地相似。
本文的最后,Rod Johnson說:
If possible, design applications to use a stateless service layer. Hold state in the web tier, rather than in the business logic tier, if possible.
總結
以上是生活随笔為你收集整理的java integer 不变模式_Java代码的变与不变的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java拆解_深入拆解Java虚拟机视频
- 下一篇: java guava 使用_Java8-