• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            歲月流轉(zhuǎn),往昔空明

            C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
              118 Posts :: 3 Stories :: 413 Comments :: 0 Trackbacks
            哈哈,大家新年快樂。本來說要盡快把這個(gè)話題結(jié)束的,結(jié)果因?yàn)榭荚嚕业腛pen source的project而拖到了現(xiàn)在。今天和明天盡可能的結(jié)束它們吧~謝謝大家的支持,也對我的拖延表示歉意。。。

            與前兩種模式不同,一些行為型模式需要在動(dòng)態(tài)過程中才能被良好的表達(dá),這也給這些模式的理解加深了難度。特別是在對已有系統(tǒng)進(jìn)行逆向分析的時(shí)候,對于一些混合使用了多個(gè)設(shè)計(jì)模式的組件而言,想準(zhǔn)確的弄清楚用了哪些模式,更是困難。所以對設(shè)計(jì)模式使用動(dòng)機(jī)的理解,是很重要的。
            這個(gè)是題外話。

            首先來討論一下Chain of responsibility
            對于職責(zé)鏈來說,“鏈”這個(gè)詞是關(guān)鍵。
            它的一個(gè)隱含的意義就是,消息的散播有序的。這種序列可以表現(xiàn)為主從關(guān)系,或先后關(guān)系。
            在運(yùn)行時(shí),消息的傳播完全有可能是樹狀或者呈現(xiàn)DAG這樣的結(jié)構(gòu)(例如在composite中)。它適合于消息傳播層次化的時(shí)候,如果不同對象之間的消息溝通是呈現(xiàn)復(fù)雜的網(wǎng)狀或者扁平狀,那么消息鏈就完全沒有作用了。
            如果消息的傳遞可以是無序的,或者不同消息接受者之間沒有明顯的主從關(guān)系,那么更適合用一些更加靈活的手法,比如signal-slot idioms。不過,signal slot與COR的關(guān)注點(diǎn)并不同,前者比后者要更加關(guān)注與實(shí)現(xiàn)細(xì)節(jié)和消息通訊的局部情況。
            COR和Decorator也有一些相似之處的,只不過COR的關(guān)系是在動(dòng)態(tài)過程中體現(xiàn),而Decorator是在靜態(tài)過程中體現(xiàn);并且COR只是強(qiáng)調(diào)信息的轉(zhuǎn)發(fā),而Decorator則是強(qiáng)調(diào)功能的增強(qiáng)。前者強(qiáng)調(diào)模式的協(xié)作組件間提供一個(gè)機(jī)制,以及怎樣實(shí)現(xiàn)這個(gè)機(jī)制;后者則強(qiáng)調(diào)模式的協(xié)作組件之間需要什么樣的功能邏輯。

            Command是個(gè)非常強(qiáng)大的工具,它的強(qiáng)大與難以理解對很多初學(xué)者來說都是很可怕的事情。
            但是對于Command的基本理解,只需要知道它是C++版的Callback,就足夠了。同時(shí),對于Command的使用,我認(rèn)為也僅限于Callback,如果Command的職責(zé)超出了Callback之外的用途,是需要謹(jǐn)慎對待的。Command解決了消息內(nèi)容與組件之間的耦合問題,但是,它并沒有解決交互耦合的問題。
            以UI設(shè)計(jì)為例,使用Command可以將UI元素與邏輯之間互相不知道對方的內(nèi)容。但是,在僅僅有Commmad的情況下,邏輯必須知道“UI”的基本情況才能正確運(yùn)行(比方說與UI一起工作,Command需要綁定哪些要素)。實(shí)際上我們對它的期望是,邏輯部分不知道UI的存在,無論是Command Line下(此Command非彼Command,哈哈)還是GUI下,甚至作為一個(gè)系統(tǒng)的子系統(tǒng)出現(xiàn),它都能正常的工作。而為與UI協(xié)同工作的Command很有可能就具備了UI下的Command實(shí)現(xiàn)所特有的特征。這些特征在移植到其它環(huán)境下會有一些困難,并需要做出設(shè)計(jì)上的再度取舍,Command模式本身也成為了一個(gè)包袱。
            其次,Command模式通常用于多對多的關(guān)系中,這使得Command在時(shí)間上和邏輯上不連貫,也會給系統(tǒng)理解帶來一定的難度。因此,如果將Command與Mediator或者COR、或者Visitor這樣的模式搭配使用,將Command理解為實(shí)踐技術(shù)與慣用手法,而將Mediator等作為設(shè)計(jì)元素來考慮的話,可能更加恰當(dāng)一些。Command提供了消息的解耦合,而其它的模式則連同通信耦合也一并解除了。

            Interpretor恐怕是DP里面所討論的用途最窄的模式了。
            實(shí)際上,稍微有點(diǎn)經(jīng)驗(yàn)的人,對這個(gè)模式都不陌生。Composite,Interpretor和Builder之間有著千絲萬縷的聯(lián)系。前者體現(xiàn)了結(jié)構(gòu)上的層次,Builder則適合于構(gòu)造Composite,而Interpretor,可以作為Builder用于構(gòu)造Composite的信息源。從更加寬泛的概念講,Interpretor適合于將一種層次化的信息轉(zhuǎn)換成另外一種表達(dá)方式。最典型的例子就是帶有子結(jié)構(gòu)的類的I/O實(shí)現(xiàn),例如將對象持久化為XML或者逆持久化,在這里面就少不了它的身影。

            posted on 2008-02-17 15:11 空明流轉(zhuǎn) 閱讀(1783) 評論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产精品久久99| 国产免费久久精品99re丫y| 无码人妻久久一区二区三区免费 | 亚洲精品美女久久777777| 久久天天婷婷五月俺也去| 中文字幕日本人妻久久久免费 | 午夜精品久久久久久影视riav | 婷婷久久综合| 国产精品久久久久久久app| 久久综合久久综合亚洲| 奇米综合四色77777久久| 国产精品九九久久精品女同亚洲欧美日韩综合区| 国产高清美女一级a毛片久久w | 亚洲国产成人久久一区久久| 99久久精品免费看国产一区二区三区| 亚洲天堂久久久| 久久精品国产亚洲AV高清热| 国产69精品久久久久99尤物| 亚洲午夜久久久久久久久久 | 久久婷婷是五月综合色狠狠| 日本精品久久久久中文字幕8 | 一级做a爰片久久毛片看看| 性欧美大战久久久久久久久| 久久精品国产国产精品四凭| 国产精品美女久久久久| 亚洲AV日韩AV天堂久久| 亚洲日本久久久午夜精品| 久久人人爽人人澡人人高潮AV| 乱亲女H秽乱长久久久| 中文字幕精品久久| 日本精品一区二区久久久| 国产精品永久久久久久久久久| 欧美va久久久噜噜噜久久| 欧美成a人片免费看久久| 99久久国产免费福利| 精品无码久久久久久午夜| 亚洲欧美日韩久久精品第一区| 丁香色欲久久久久久综合网| 伊人色综合久久天天人守人婷| 久久狠狠一本精品综合网| 久久国产V一级毛多内射|