隨筆-19  評論-2  文章-1  trackbacks-0

            <java與模式> ---電子書

          抽象工廠模式:page171 14

           

          抽象工廠的用意是使客戶端在不必指定產品的具體的情況下創建多個產品族中的產品對象;

          抽象工程模式是對象的創建模式。

          在什么情況下用抽象工廠模式:

          1 一個系統不應當依賴產品類實例如何創建、組合和表達的細節,這對與所有形態的工廠模式都是重要的。

          2、這個系統的產品有多于一個的產品族,而系統只消耗其中某一族的產品

          3、同屬于一個產品族的產品是在一起使用的,這一約束必須在系統的設計中體現出來

          4、系統提供一個產品類的庫,所以的產品以同樣的接口出現,從而使客戶端不依賴于實現。

           

          擴展:

          1、產品的等級結構擴展,也就是當在增加一個平行等級新的產品時,抽象工程不支持“開—閉”原則

          2、在增加新產品族的時,支持開-閉原則。

           

          問題:為什么上面的抽象工廠和抽象產品沒有依賴關系呢?(在工廠方法模式中)在這里我們同樣用了抽象產品的接口作為抽象工廠的返回接口呀!

          15 單例模式 page201

          單例模式的要點:

          1、  某個類只可以有一個實例

          2、  該類必須自行創建實例

          3、  它必須自行向整個系統提供這個實例

           

          一、 漢式單例類

          該類自己含有一個實現自己實例的靜態方法,同時為了不讓外界創建實例,則它的構造方法必須是私有的。

          代碼測試:

                 class EagerSimple{

                        private static final EagerSimple eager = new EagerSimple();

                        private EagerSimple{}

                        public static EagerSimple getInstance(){

                               return eager;

          }

          }

                

          二、懶漢式單例類

          它也餓漢式單例類不同的是,只有當自己被引用的時候,自己才被實例化。結構圖與餓漢式單例類一樣的。

           

          代碼測試:

           

          class LanSimple{

                 private static LanSimple simple= null;

                 private LanSimple(){}

                 synchronized public static LanSimple getInstance(){

                        if(simple == null)

                               simple = new LanSimple();

                        return simple;

          }    

          }

          餓漢式單例類與懶漢式單例類的區別是:在時間和反映上說,餓漢式要比懶漢式好,但是從資源利用上則餓漢式要好。

           

           

          雙重檢查成例的“懶漢式”單例類:

          class LazySimple{

                 private LazySimple(){}

                 private static LazySimple lazy = null;

                

                 public static LazySimple getInstance(){

                        if(lazy == null){

                               synchronized(lazy){

                                      if(lazy == null){

                                             lazy = new LazySimple();

                                      }

                               }

                        }

                        return lazy;

                 }

          }

          這個代碼看上去并沒有步合理之出,而且我認為還相當有意義,可是為什么說在java中就不對呢?不能夠使用呢?問題在哪里?

          posted on 2005-07-30 20:59 sky 閱讀(181) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 新营市| 泰宁县| 资兴市| 澄江县| 长沙县| 六安市| 静宁县| 山西省| 抚州市| 新邵县| 大新县| 宜川县| 谢通门县| 梅州市| 西平县| 常德市| 许昌县| 莱芜市| 五常市| 红桥区| 郑州市| 林西县| 布尔津县| 石棉县| 任丘市| 南雄市| 陵水| 抚州市| 天等县| 曲麻莱县| 丰顺县| 宕昌县| 濮阳县| 平武县| 读书| 西盟| 华池县| 荔波县| 礼泉县| 尉犁县| 连山|