<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)  編輯  收藏 所屬分類: 讀書
    主站蜘蛛池模板: 免费人妻无码不卡中文字幕18禁 | 久久国产乱子伦精品免费一 | 亚洲AV无码久久精品色欲| 久久99热精品免费观看动漫| 亚洲a∨无码男人的天堂| 免费人妻无码不卡中文字幕18禁 | 亚洲午夜无码AV毛片久久| 午夜免费福利视频| 亚洲成aⅴ人片久青草影院按摩| MM131亚洲国产美女久久| 国产在线观看麻豆91精品免费| 特级aa**毛片免费观看| 亚洲视频一区在线| 亚洲精品成人片在线观看| 四虎成年永久免费网站| 亚洲高清免费视频| 在线综合亚洲欧洲综合网站| 亚洲人成色7777在线观看| 国产麻豆剧传媒精品国产免费| 日韩视频在线观看免费| 色屁屁在线观看视频免费| 亚洲乱码中文字幕小综合| 亚洲精品无码乱码成人| 国产又黄又爽又猛的免费视频播放| 日韩在线不卡免费视频一区| 免费一级毛suv好看的国产网站 | 亚洲国产综合无码一区二区二三区| 亚洲综合免费视频| 精品国产福利尤物免费| 亚洲国产AV无码一区二区三区| 久久精品国产亚洲AV无码娇色| 亚洲人成无码网站久久99热国产| 成年人在线免费观看| 69视频在线是免费观看| 两个人的视频www免费| 粉色视频免费入口| 亚洲精品中文字幕无码A片老| 激情内射亚洲一区二区三区| 亚洲中文字幕无码爆乳AV| 一区二区三区亚洲视频| 蜜桃精品免费久久久久影院|