離弦之Ray

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            55 Posts :: 0 Stories :: 33 Comments :: 0 Trackbacks
           

          Template method pattern

          從這個模式的名字就可以知道個大概,Template說明這個模式有一個模版,子類都要按照父類列出的大綱來干活。在這個模式中,父類通常是abstract的。為什么不用接口?因為對某些所有子類都要用到的方法,父類中就給出了代碼,而接口中是不能有具體實現代碼的。

          父類中有一個總的方法就是所謂的template method,這個方法通常被聲明為final,這樣子類就無法override它,保證了它的權威性。這個template method調用其它方法,這些“其它方法”包括了三個類型:

          第一種,是abstract類型,子類需要根據自己的情況實現這部分代碼;

          第二種,是final型的,這種方法父類把它寫死了,子類必須遵守;

          第三種,就是普通方法,是optional,子類可以延用父類的方法,也可以override掉它,寫自己的代碼,這種optional的方法給它一個名字叫做hook

          這個父類通常是這種形勢。

          abstract class AbstractClass{

            final void templateMethod(){

                a();

                b();

                c();

                …

          }

              abstract void a();

              final void b(){}

              void c(){}

          }

          應該說這個模式既蘊含著權威性和自由性。

          Iterator and Composite Patterns

                 這個模式的研究對象是Collection,包括ArrayListArray甚至還有Hashmap等等一切java里面的集合對象。Iterator的理念是把集合對象中的遍歷等功能獨立抽取出來,實現一個Iterator的接口,主要實現next()hasNext()兩個方法,這些東西和數據結構里面的東西基本一樣。

          而以此為基礎的Composite Pattern其實就是數據結構里面樹的概念,所以這里的東西還是找本數據結構書看看更好。

          The State Pattern

                 初看這個模式,發現里面有一個類似UML中狀態圖的東西,如其名字,這個模式主要描述如何處理應用中出現的“狀態”。

                 解決方式是這樣的:

          .      第一步,創建一個叫做State的接口,里面包含什么東西呢?記得UML狀態圖中發生狀態轉換時箭頭上面那些改變的條件?把這些條件全部轉化為方法,表示當這個條件發生時,狀態該怎么變。

                 第二步,每個具體的concreteState都要實現都要實現State這個接口。怎么實現?當然,state不是獨立出現的,總有一個把它作為參數的類,里面有個私有變量保存當前的狀態,暫且就把它稱作currentState吧。接口中定義的方法,在concreteState中這樣實現:每個方法根據條件定義,將currentState改成相應的狀態。

                 以上其實就是State Pattern的精髓。

          posted on 2007-09-22 13:51 離弦之ray的技術天空 閱讀(225) 評論(0)  編輯  收藏 所屬分類: Design Pattern
          主站蜘蛛池模板: 江都市| 中卫市| 亳州市| 木兰县| 永仁县| 新宾| 莫力| 梓潼县| 修水县| 沅江市| 澄迈县| 无为县| 安阳市| 固镇县| 乳源| 景洪市| 东源县| 铜山县| 彝良县| 玉环县| 汉中市| 鸡东县| 九寨沟县| 铁岭县| 汉寿县| 贡嘎县| 孙吴县| 汪清县| 吉木萨尔县| 宜昌市| 南部县| 资中县| 凤凰县| 名山县| 湘乡市| 如皋市| 宁晋县| 八宿县| 天长市| 石家庄市| 临夏县|