• <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>
             看到有些朋友很喜歡用軟命令的方式來提供接口, 什么是軟命令, 其實(shí)就是一個(gè)接口,根據(jù)參數(shù)的不同,可以實(shí)現(xiàn)N多的功能(我不知道"軟命令"這名詞是我原創(chuàng)還是現(xiàn)有的,我們暫時(shí)就這樣稱呼吧).

            看看現(xiàn)實(shí)中有哪些產(chǎn)品已經(jīng)成功應(yīng)用了這種特性?

            首先想到是的是windows窗口的消息處理函數(shù),用C的方式是類似這樣:
            LRESULT MessageProc(HWND hWnd, UINT nMsgType, WPARAM wParam, LPARAM lParam);

            用C++實(shí)現(xiàn)是類似這樣
            class CWindow
            {
            public:
            LRESULT MessageHander(UINT nMsgType, WPARAM wParam, LPARAM lParam);
            };
            當(dāng)然里面實(shí)現(xiàn)時(shí)會(huì)有一堆switch case.

            接下來會(huì)想到COM里IDispatch接口的Invoke函數(shù),外部無論調(diào)用對(duì)象的什么方法或?qū)傩裕纪ㄟ^這個(gè)自動(dòng)化接口。

            再往廣義上想,DOS里的命令行,Windbg的操作命令等,其實(shí)都是"軟命令"。

            再廣一點(diǎn), 整個(gè)Web服務(wù)器就是一個(gè)"軟命令"入口,比如URL API,都是通過一個(gè)單獨(dú)的Http請(qǐng)求入口,可以實(shí)現(xiàn)各種各樣的任務(wù)。

            我們對(duì)上面的例子進(jìn)行抽象,就會(huì)發(fā)現(xiàn)他們的共性是對(duì)外接口固定,但是內(nèi)部功能確是可以擴(kuò)充,很符合開放封閉這條設(shè)計(jì)原則。往設(shè)計(jì)模式上考慮, 其實(shí)就是單一入口的Facade模式。

            這么方便的接口,那么是不是在我們平時(shí)的設(shè)計(jì)中應(yīng)該盡量使用呢? 我看未必。 如果按照這種設(shè)計(jì),任何類都只要一個(gè)MethodCallRequest方法就好了,根據(jù)這個(gè)入口,我會(huì)根據(jù)你的命令類型,調(diào)用相應(yīng)的方法。如果你真的所有的類都這樣做了,等類層次一復(fù)雜,我看你的代碼就不用維護(hù)了。當(dāng)然也有語言確實(shí)是這么做的,比如Objective-c, 它內(nèi)部對(duì)象的每個(gè)函數(shù)調(diào)用,都是通過查找對(duì)象的function table, 然后再調(diào)用對(duì)應(yīng)的function,但它的前提是語言本身提供這個(gè)特性。但是像C++這種靜態(tài)強(qiáng)類型的語言,讓對(duì)象的每個(gè)方法有明確的用途,讓編譯器幫你檢測對(duì)象是不是有相應(yīng)的方法,一來清晰,而來高效,何樂而不為?

            那么究竟什么時(shí)候適用這種接口方式呢?

            我的看法是只有當(dāng)你的模塊是一個(gè)單獨(dú)的子系統(tǒng),當(dāng)對(duì)外提供功能時(shí),才可以這么做。這里的子系統(tǒng)不一定要是一個(gè)很大的概念,比如一個(gè)窗口,一個(gè)COM對(duì)象都可以稱為簡單的子系統(tǒng),但是它的前提要求是獨(dú)立,對(duì)外,并且最好你可以預(yù)見到以后它的功能會(huì)改變和擴(kuò)充。

            那么有沒有不用這種"軟命令"的接口方式,但是我也可以不斷擴(kuò)充對(duì)象提供的方法呢? 有的,設(shè)計(jì)模式里的Visitor模式就是為此而準(zhǔn)備的,這里就不多說了。
            posted on 2012-06-13 10:08 Richard Wei 閱讀(3368) 評(píng)論(5)  編輯 收藏 引用 所屬分類: 設(shè)計(jì)模式

            FeedBack:
            # re: 軟命令接口的適用場合
            2012-06-13 11:21 | 華夏之火
            在這種軟命令下,只能給對(duì)象發(fā)送消息,對(duì)象可以采取種種方式響應(yīng)消息,甚至可在對(duì)象外面響應(yīng)消息,在外面截取消息,不讓消息流進(jìn)到之前的消息處理中。這樣,就不會(huì)存在什么復(fù)雜類層次結(jié)構(gòu)。這種方式,在下認(rèn)為并不是“單一入口的Faced模式”,而是幾乎包含了所有接口的變種橋接模式  回復(fù)  更多評(píng)論
              
            # re: 軟命令接口的適用場合
            2012-06-13 13:29 | Richard Wei
            @華夏之火
            這個(gè)怎么說呢,F(xiàn)aced模式強(qiáng)調(diào)的是一個(gè)復(fù)雜系統(tǒng)對(duì)外有一個(gè)統(tǒng)一的入口; Bridge模式強(qiáng)調(diào)的是分層的概念,將抽象層和實(shí)現(xiàn)層分離,二層可以分別獨(dú)立的變化。感覺上面的"軟命令"方式,從對(duì)外暴露的接口的簡單統(tǒng)一性來說比較符合Faced模式;但是從內(nèi)部實(shí)現(xiàn)來說,你要理解成同一消息可以有多種處理方式,Bridge模式也可以。
              回復(fù)  更多評(píng)論
              
            # re: 軟命令接口的適用場合[未登錄]
            2012-06-13 21:04 | jacky
            Faced模式是什么模式,沒聽說過啊,應(yīng)該是facade吧  回復(fù)  更多評(píng)論
              
            # re: 軟命令接口的適用場合
            2012-06-13 21:08 | Richard Wei
            @jacky
            確實(shí)應(yīng)該是facade, 只留意大概讀音,沒想到拼寫錯(cuò)誤。
            多謝指正。  回復(fù)  更多評(píng)論
              
            # re: 軟命令接口的適用場合
            2012-06-22 01:34 | tb
            多些指教了   回復(fù)  更多評(píng)論
              
            无码人妻少妇久久中文字幕蜜桃 | 国产成人精品三上悠亚久久| 一本久久久久久久| 精品精品国产自在久久高清| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 久久综合亚洲色一区二区三区| 日韩十八禁一区二区久久 | 精品免费tv久久久久久久| 97久久超碰成人精品网站| 国产精品一区二区久久不卡| 中文字幕无码免费久久| 久久久久久久人妻无码中文字幕爆| 日本欧美久久久久免费播放网| 久久精品人人做人人爽97| 99久久精品国产一区二区| 久久一本综合| 久久青青草原精品国产| 亚洲午夜精品久久久久久人妖| 久久精品国产99久久香蕉| 免费久久人人爽人人爽av| 成人综合伊人五月婷久久| 国内精品久久久久久久久| 久久久久亚洲精品日久生情 | 中文字幕无码久久精品青草| 久久人人爽人人爽人人片AV高清| 青青草原精品99久久精品66| 香蕉久久夜色精品国产小说| 亚洲精品成人久久久| 97r久久精品国产99国产精| 日本精品久久久久影院日本| 久久国产乱子伦免费精品| 久久久久久久亚洲精品 | 国产成年无码久久久久毛片| 久久国产高清一区二区三区| 亚洲日韩中文无码久久| 人人狠狠综合久久亚洲婷婷| 97精品伊人久久久大香线蕉| 国产精品内射久久久久欢欢| 色偷偷久久一区二区三区| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 久久久国产精品|