<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    應用,一定要應用

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      25 Posts :: 0 Stories :: 118 Comments :: 0 Trackbacks

    2004-08-31

    構建型模式和結構型模式強調的都是靜態的類實體之間的關系,行為型模式著力解決的是類實體之間的通訊關系。希望以面向對象的方式描述一個控制流程。
    以往的經歷中大多是解決類實體的封裝問題,對于類之間的通訊方式上,并沒有刻意的去理解,所以有些行為型模式相對陌生。
    還有一個原因就是行為型模式和面向過程的東西有很多近似之處,導致一定的理解的混淆。
    從筆記就可以看出理解的不夠,可以再專門針對行為型模式做些細節的學習。

    1 chain of responsibility(職責鏈)-行為型對象模式
    這是個“請求”處理的模式。他提供一個思路,來解決“請求”在一組具有一定結構的類之間傳遞時的問題,所以,我認為這只是一種思路,一種將“請求”象鏈條一樣傳導出去的方式。他的具體傳遞方式,除了和鏈的設計有關之外,最重要的是和對象組的結構有關。
    當然,如果沒有結構的對象組,我們也可以強行的動態構建一個鏈,這種方式雖然復雜和略土,但肯定更加的靈活,不僅能控制處理,還能控制鏈的走向。

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

    2 command(命令)-行為型對象模式
    將請求封裝為一個對象,從而可以對請求做一些統一性處理,如:排隊、日志、撤銷等。
    適用性:
    1、是回調機制的一個面向對象的替代品
    2、在不同時期指定、排列、和執行請求
    3、支持取消操作,但是,此處對象的狀態存儲是個麻煩的東西。
    4、支持原語操作上構建高層操作的系統。這種在支持“事務”的系統中很常見。
    理解還是不很透徹

    3、Iterator(迭代器)-行為型對象模式
    將聚合類的遍歷算法封裝為Iterator,從而封裝對象的內部表示。
    Iterator分為外部和內部,外部更加靈活,內部傳入參數簡單(只需要操作),內部Iterator自動遍歷所有元素。
    Iterator可以封裝算法,也可以只記錄狀態,由聚合類封裝算法,封裝算法的iterator可能會破壞聚合類的封裝性。

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

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

    6、observer(觀察者)/依賴(dependents)/發布-訂閱(Publish-Subject)
    suject(目標)和observer(觀察者)是關鍵對象,suject和不固定的observer發生關系,將這種關系解耦是這個模式的主要功能,listener機制可以看作這種模式的一個實現,當然mvc也是這種模式的一個好的應用場景。
    與mediator的區別主要體現在,observer是一個對關聯關系的解耦過程,而mediator更加注重各個對象執行的功能。

    7、state(狀態)/狀態對象(Objects for Status)
    允許一個對象在改變其狀態的時候改變它的行為,使得對象似乎修改了自己的類。
    1、將狀態相關的行為局部化。
    2、狀態轉換顯式化

    我們可以根據當前窗口的狀態來轉變窗口的菜單和操作,這種方式可以用state模式來實現。

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

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


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

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

    相關的關鍵參與者為:
    1、abstractExpression(抽象表達式,統一的接口)
    2、terminalExpression(終結符表達式)
    3、nonterminalExpression(非終結符表達式)

    posted on 2006-08-24 17:10 flyffa 閱讀(1178) 評論(0)  編輯  收藏 所屬分類: 讀書
    主站蜘蛛池模板: 亚洲香蕉成人AV网站在线观看| 亚洲一区二区免费视频| 一级毛片免费播放男男| 美女裸体无遮挡免费视频网站| 亚洲AV香蕉一区区二区三区| 亚洲欧美国产精品专区久久| 亚洲AV无码一区二区三区网址| 亚洲日韩国产二区无码 | 日本大片在线看黄a∨免费| 成年女人18级毛片毛片免费| 成人av免费电影| 四虎永久成人免费| 亚洲国产黄在线观看| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 国产99久久久久久免费看| 精品人妻系列无码人妻免费视频| 久久精品无码专区免费| 国产成人一区二区三区视频免费| 99国产精品免费视频观看| 最近中文字幕大全中文字幕免费| 18勿入网站免费永久| 免费黄色小视频网站| 啊v在线免费观看| 亚洲熟女少妇一区二区| 亚洲电影国产一区| 亚洲高清有码中文字| 国产亚洲视频在线观看网址| 又粗又长又爽又长黄免费视频 | 成年大片免费视频播放一级| 久久精品无码免费不卡| 99在线在线视频免费视频观看| 免费av欧美国产在钱| 免费一级毛片在线观看| 亚洲va久久久噜噜噜久久男同| 亚洲精品美女在线观看| 亚洲经典千人经典日产| 国产VA免费精品高清在线| 久久99国产乱子伦精品免费| 性感美女视频免费网站午夜| 亚洲人成影院在线观看| 亚洲永久永久永久永久永久精品|