隨筆-19  評論-2  文章-1  trackbacks-0
          不變模式:
                 
                  不變模式可以增強對象的強壯性,不變模式準許多個對象共享一個對象,這降低了對該對象進行并發訪問時的同步化開銷。如果要修改一個不變對象的狀態,則需要創建一個新的對象,并將其存入新的對象里。不變模式只涉及到一個類,一個類的內部狀態一旦被創建以后,在整個期間都不會發生變化。他有兩種一種是強不變模式和弱不變模式。
                  弱不變模式:
          首先滿足沒有方法可以改變對象的狀態,則對象一旦被創建之后,對象的狀態就不會改變。二該對象的所有的屬性都是私有的,并且不準許聲明任何公有的方法來改變他們。三這個對象所引用的對象也應該是不變的對象,如果在初始化時應用了一個可變的對象,則應該對該可變對象進行復制一份,而不要使用原來的拷貝。這種模式的缺點是他可以用子類,并且子類可以是可變的對象??勺兊淖宇惪赡芤恍薷母割悓ο蟮臓顟B,從而可能會允許外界修改父對象的狀態。

          問題:
                 為什么說可變的對象可以修該父類對象的狀態呢?怎樣做?

          強不變模式首先要滿足弱不變模式,然后將這個類聲明成final類,則它變不可能有子類了,并且也將該對象所考慮到的所有方法聲明為final。
          不變模式與享元模式有很大的相同處,他們的對象狀態都有要求不隨環境的變化而變化,不過享元模式的內涵狀態在不影響享元對象的共享時,可以為可變的。不變模式對對象的要求要比享元模式對對象的要求更嚴格。


          posted on 2005-08-14 23:39 sky 閱讀(644) 評論(2)  編輯  收藏

          評論:
          # re: Immutable 不變模式 2008-04-13 16:22 | wangsh
          Good question,I Think in the java language,The weak immutable and stronge immutable is undiference!   回復  更多評論
            
          # re: Immutable 不變模式 2009-09-16 11:45 | TYY
          我認為這應該和多態有關系吧!比如toString()方法,Base base = new Sub();
          System.out.println("base = " + base);打印出的結果其實是Sub對象的!  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 富锦市| 水城县| 化隆| 平舆县| 镇平县| 绥宁县| 宝山区| 布拖县| 金秀| 伊春市| 双辽市| 兴山县| 确山县| 通州市| 大石桥市| 廊坊市| 深州市| 会宁县| 天全县| 志丹县| 巫溪县| 江陵县| 沽源县| 肃北| 商南县| 浦城县| 屏边| 新化县| 卓资县| 郴州市| 井陉县| 封开县| 晋州市| 永丰县| 德钦县| 甘肃省| 景东| 黔西| 杨浦区| 克山县| 翁牛特旗|