經(jīng)驗不在于年限,在于積累---專注互聯(lián)網(wǎng)軟件開發(fā)

          把工作當事業(yè)做,把項目當作品做!

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            55 Posts :: 0 Stories :: 66 Comments :: 0 Trackbacks

          先簡單介紹Template Method模式的內(nèi)容和應用場景。

          Template Method模式也叫模板方法模式,它把具有特定步驟算法中的某些必要的處理委讓給抽象方法,通過子類繼承對抽象方法的不同實現(xiàn)改變整個算法的行為。

          在作為抽象類的父類里,定義了一個具有固定算法并可以細分為多個步驟的模板方法(public),Template Method模式把這些可以被細分的可變步驟抽象為可以被子類重載的抽象方法(protected abstract),并通過在子類中的重載(重新定義),做到無需改變模板方法的算法步驟而可以重新定義該算法中的某些特定的步驟。

          Template Method模式的UML圖如下:

          image

          (注意:版權所有hankchen

          Template Method模式一般應用在具有以下條件的應用中:

          1. 具有統(tǒng)一的操作步驟或操作過程

          2. 具有不同的操作細節(jié)

          3. 存在多個具有同樣操作步驟的應用場景,但某些具體的操作細節(jié)卻各不相同

          前一段時間,做了一個SEO的項目,需要到一些站點發(fā)帖回復增加外鏈的數(shù)目,期望提高搜索引擎的排名順序。先不管這個項目的可行性和定位,現(xiàn)在只談涉及的設計技術(模式與重構)。

          由于涉及多個站點(SitePost),并且站點的數(shù)目未來是不可預知的,這是開發(fā)中的一個變數(shù)。為了以后的可擴展性,下面是部分設計圖:

          image

          (注意:版權所有hankchen

          在接口ISitePost中定義了每個站點類必須具備群發(fā)帖、群回復的功能。

          群發(fā)帖的接口:

          public boolean postAll(List<Siteboards> childboard, List<Siteusers> users, List<Postinfos> postinfos);

          群回復的接口:

          public boolean replyAll(List<Articleinfos>articles, List<Siteusers> users, List<Postinfos> postinfos, );

          現(xiàn)在以群發(fā)帖的接口為例,在抽象類AbstractSitePost中采用Template Method模式實現(xiàn)了這個接口。

          之所以,采用這個模板方法,是因為每個站點群發(fā)帖的過程,或者說步驟,是一樣的:

          1. 首先的群登錄(隨機取代理IP)

          2. 然后是,針對站點的每個版面,隨機用一個賬號和一個帖子來提交。

          這些過程是相同的,不同的是:每個站點的發(fā)帖細節(jié)不同(即post方法不同)。

          具體發(fā)帖的post方法定義如下:

          Protected abstract String post(Siteusers userinfo,Siteboards sb,Postinfos postinfo);

          這樣,具體到AAA站點(AAASitePost類),只需要實現(xiàn)自己的post方法即可。

          友情提示:本博文章歡迎轉(zhuǎn)載,但請注明出處:陳新漢
          posted on 2009-09-18 16:22 hankchen 閱讀(1222) 評論(0)  編輯  收藏 所屬分類: 設計模式

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 晴隆县| 稷山县| 耿马| 昭苏县| 门源| 牡丹江市| 沁水县| 青神县| 临夏县| 当涂县| 怀仁县| 扎兰屯市| 博罗县| 桃江县| 桂东县| 虹口区| 高要市| 沽源县| 黄大仙区| 遵化市| 瑞丽市| 资阳市| 日照市| 肇东市| 离岛区| 南充市| 南安市| 视频| 河池市| 吴桥县| 苍山县| 镇远县| 阿荣旗| 彭山县| 泾阳县| 桦南县| 周宁县| 安福县| 怀集县| 施秉县| 资阳市|