隨筆-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)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 方城县| 西峡县| 静宁县| 兴城市| 吉水县| 无锡市| 米易县| 荃湾区| 台前县| 尉犁县| 福泉市| 军事| 通化县| 黔江区| 皮山县| 长海县| 湖口县| 永胜县| 班戈县| 尼玛县| 张家界市| 娄底市| 萍乡市| 徐水县| 二连浩特市| 辽宁省| 江城| 白玉县| 烟台市| 拜城县| 沅江市| 关岭| 分宜县| 云梦县| 乌兰浩特市| 繁峙县| 茂名市| 简阳市| 西和县| 财经| 宁河县|