應(yīng)用,一定要應(yīng)用

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            25 Posts :: 0 Stories :: 118 Comments :: 0 Trackbacks

          2004-08-31

          構(gòu)建型模式和結(jié)構(gòu)型模式強(qiáng)調(diào)的都是靜態(tài)的類實(shí)體之間的關(guān)系,行為型模式著力解決的是類實(shí)體之間的通訊關(guān)系。希望以面向?qū)ο蟮姆绞矫枋鲆粋€(gè)控制流程。
          以往的經(jīng)歷中大多是解決類實(shí)體的封裝問題,對(duì)于類之間的通訊方式上,并沒有刻意的去理解,所以有些行為型模式相對(duì)陌生。
          還有一個(gè)原因就是行為型模式和面向過程的東西有很多近似之處,導(dǎo)致一定的理解的混淆。
          從筆記就可以看出理解的不夠,可以再專門針對(duì)行為型模式做些細(xì)節(jié)的學(xué)習(xí)。

          1 chain of responsibility(職責(zé)鏈)-行為型對(duì)象模式
          這是個(gè)“請(qǐng)求”處理的模式。他提供一個(gè)思路,來解決“請(qǐng)求”在一組具有一定結(jié)構(gòu)的類之間傳遞時(shí)的問題,所以,我認(rèn)為這只是一種思路,一種將“請(qǐng)求”象鏈條一樣傳導(dǎo)出去的方式。他的具體傳遞方式,除了和鏈的設(shè)計(jì)有關(guān)之外,最重要的是和對(duì)象組的結(jié)構(gòu)有關(guān)。
          當(dāng)然,如果沒有結(jié)構(gòu)的對(duì)象組,我們也可以強(qiáng)行的動(dòng)態(tài)構(gòu)建一個(gè)鏈,這種方式雖然復(fù)雜和略土,但肯定更加的靈活,不僅能控制處理,還能控制鏈的走向。

          一般來看,composite模式和這種模式經(jīng)常在一起,Microsoft IE中的文檔事件模型應(yīng)該采用的就是這樣的模式。

          2 command(命令)-行為型對(duì)象模式
          將請(qǐng)求封裝為一個(gè)對(duì)象,從而可以對(duì)請(qǐng)求做一些統(tǒng)一性處理,如:排隊(duì)、日志、撤銷等。
          適用性:
          1、是回調(diào)機(jī)制的一個(gè)面向?qū)ο蟮奶娲?br />2、在不同時(shí)期指定、排列、和執(zhí)行請(qǐng)求
          3、支持取消操作,但是,此處對(duì)象的狀態(tài)存儲(chǔ)是個(gè)麻煩的東西。
          4、支持原語(yǔ)操作上構(gòu)建高層操作的系統(tǒng)。這種在支持“事務(wù)”的系統(tǒng)中很常見。
          理解還是不很透徹

          3、Iterator(迭代器)-行為型對(duì)象模式
          將聚合類的遍歷算法封裝為Iterator,從而封裝對(duì)象的內(nèi)部表示。
          Iterator分為外部和內(nèi)部,外部更加靈活,內(nèi)部傳入?yún)?shù)簡(jiǎn)單(只需要操作),內(nèi)部Iterator自動(dòng)遍歷所有元素。
          Iterator可以封裝算法,也可以只記錄狀態(tài),由聚合類封裝算法,封裝算法的iterator可能會(huì)破壞聚合類的封裝性。

          4、mediator(中介者)
          mediator希望通過一個(gè)中控對(duì)象來完成對(duì)多個(gè)對(duì)象的關(guān)系的管理。
          將多數(shù)可以可以重用的組件無關(guān)聯(lián)的構(gòu)建起來,而他們之間的關(guān)系由額外的對(duì)象來完成。
          在圖形化編程里,可以用此模式和listener機(jī)制(observer模式)結(jié)合使用,更加方便,進(jìn)一步解除了中控對(duì)象與其他對(duì)象的耦合。

          5、memento(備忘錄)/token
          原發(fā)器(originator)(需要保存狀態(tài)的)申請(qǐng)一個(gè)備忘錄(memento),并自己將狀態(tài)保存進(jìn)去,然后,將備忘錄交給管理者(caretaker),當(dāng)出現(xiàn)需要的時(shí)候,管理者將合適的備忘錄交給原發(fā)器,原發(fā)器自己恢復(fù)自己的
          狀態(tài)。
          memento模式,從originator中分離了保存客戶請(qǐng)求狀態(tài)的過程。并且memento的存儲(chǔ)和解釋都是由originator完成,保證了封裝的邊界。
          如果備忘錄的創(chuàng)建及其返回(給原發(fā)器)的順序是可預(yù)測(cè)的,備忘錄可以存儲(chǔ)增量改變。

          6、observer(觀察者)/依賴(dependents)/發(fā)布-訂閱(Publish-Subject)
          suject(目標(biāo))和observer(觀察者)是關(guān)鍵對(duì)象,suject和不固定的observer發(fā)生關(guān)系,將這種關(guān)系解耦是這個(gè)模式的主要功能,listener機(jī)制可以看作這種模式的一個(gè)實(shí)現(xiàn),當(dāng)然mvc也是這種模式的一個(gè)好的應(yīng)用場(chǎng)景。
          與mediator的區(qū)別主要體現(xiàn)在,observer是一個(gè)對(duì)關(guān)聯(lián)關(guān)系的解耦過程,而mediator更加注重各個(gè)對(duì)象執(zhí)行的功能。

          7、state(狀態(tài))/狀態(tài)對(duì)象(Objects for Status)
          允許一個(gè)對(duì)象在改變其狀態(tài)的時(shí)候改變它的行為,使得對(duì)象似乎修改了自己的類。
          1、將狀態(tài)相關(guān)的行為局部化。
          2、狀態(tài)轉(zhuǎn)換顯式化

          我們可以根據(jù)當(dāng)前窗口的狀態(tài)來轉(zhuǎn)變窗口的菜單和操作,這種方式可以用state模式來實(shí)現(xiàn)。

          8、strategy(策略)
          將算法單獨(dú)的封裝起來,使得它獨(dú)立于其他對(duì)象的變化。
          其實(shí)這種方式和面向過程里的一個(gè)算法函數(shù)封裝基本是一樣的,只是由于封裝成為了類,會(huì)有一些接口統(tǒng)一的便于替換的特性。

          9、visitor(訪問者)
          這種模式的主要目的是分離操作和對(duì)象,追求的是對(duì)象的重用和簡(jiǎn)單,以及操作的可替代性。
          相對(duì)來說,strategy模式更加追求的是封裝操作,追求操作的重用性。
          observer、mediator追求分離對(duì)象之間的關(guān)系與對(duì)象本身。


          以上都是對(duì)象級(jí)別的行為模式,以下是類級(jí)別的行為模式
          1、template(模板)
          定義一個(gè)算法的骨架,并將其中一些步驟延遲到子類中。
          這種使用較多,不多說了。

          2、interpreter(解釋器)
          本模式描述了如何為簡(jiǎn)單的語(yǔ)言定義一個(gè)文法,如何在該語(yǔ)言中表示一個(gè)句子,以及如何解釋這些句子。
          這種方式在正則表達(dá)式中比較明顯,在以往的程序應(yīng)用中,特別是上層應(yīng)用中很少用到。
          expression::= literal | alternation | sequence | repetition | '(' expression ')'
          alternation ::= expression '|' expression
          sequence ::= expression '&' expression
          repetition ::= expression '*'
          literal ::= 'a'|'b'|...{'a'|'b'|...}*

          相關(guān)的關(guān)鍵參與者為:
          1、abstractExpression(抽象表達(dá)式,統(tǒng)一的接口)
          2、terminalExpression(終結(jié)符表達(dá)式)
          3、nonterminalExpression(非終結(jié)符表達(dá)式)

          posted on 2006-08-24 17:10 flyffa 閱讀(1180) 評(píng)論(0)  編輯  收藏 所屬分類: 讀書
          主站蜘蛛池模板: 开阳县| 蓬安县| 辽阳市| 阜新| 藁城市| 申扎县| 万山特区| 罗城| 桓仁| 扶绥县| 保康县| 邵武市| 北京市| 常德市| 长葛市| 包头市| 昌宁县| 嘉兴市| 柯坪县| 海安县| 娄烦县| 荥阳市| 巴青县| 富裕县| 河南省| 宜良县| 康乐县| 铜鼓县| 乐山市| 金塔县| 扎赉特旗| 林甸县| 偏关县| 嘉善县| 依安县| 昆山市| 和静县| 景泰县| 盐边县| 临朐县| 浑源县|