• <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>

            積木

            No sub title

              C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(1)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            設(shè)計(jì)模式學(xué)習(xí)總結(jié)之四

            六:Bridge模式(即:橋接模式)

             講之前,先聲明:由于本人電腦不是很好,沒法裝上vc環(huán)境運(yùn)行。因此以下代碼,僅是手工輸入,在環(huán)境中未必能編譯通過。
            但以下,僅僅只是介紹一種思想。僅供參考。同時(shí),如果說明有誤之處,歡迎指正。另外,則于一次性手工輸入下面那么多東東,確實(shí)
            不容易,所以Delphi的具體實(shí)現(xiàn)。就不在此列出。如有興趣用Delphi實(shí)現(xiàn)的朋友,也可以找本人交流,本人盛感榮幸。
            (當(dāng)然如果是C++的朋友也同樣、甚至更加歡迎)

             看了這么多次的橋接模式,這次總算明白了。要想理解橋接模式,個(gè)人認(rèn)為,還是有必要同抽象及其實(shí)現(xiàn)進(jìn)行一下比較。
             1) 抽象及實(shí)現(xiàn)。我相信,跟不同的人說話,都會(huì)有訣竅在里頭。同是coder,相信,最默契的溝通,還是code吧。我們來看下抽象及其實(shí)現(xiàn)的代碼。
            //抽象基類聲明
            class AbstractClassX
            {
            private:
             //xxx
            protected:
             //xxx
            public:
             //xxx
             void DoSomething(void) = 0;
             //xxx
            }

            //AbstractClassX的具體實(shí)現(xiàn) ClassXImplX1
            class ClassXImplX1 : public AbstractClassX
            {
            ....
            public:
             void DoSomething(void){ // do something with method 1... }
            }

            //AbstractClassX的具體實(shí)現(xiàn) ClassXImplX2
            class ClassXImplX2 : public AbstractClassX
            {
            ....
            public:
             void DoSomething(void){ // do something with method 2... }
            }

             在實(shí)際應(yīng)用中,我們用的是抽象類。而實(shí)際上實(shí)例化的,卻是某具體子類。這種實(shí)現(xiàn)被我們多數(shù)人所使用。而它實(shí)際上解決的只是這么一類問題,即:同一行為的不同表現(xiàn)。當(dāng)
            然大多數(shù)需求,用此就可以了。
             但現(xiàn)在假如說有這么一種情況:假如說,上面的處理僅僅只適用于平臺(tái)A,而用戶卻希望同時(shí),它也要能夠在平臺(tái)B上也能夠一樣的操作。那當(dāng)如何?
            很明顯的,此種需要,并不是行為上的需求,因?yàn)椴徽撌窃谄脚_(tái)A上還是平臺(tái)B上,都要執(zhí)行相同的操作。而且表示也是一樣的。該需要的實(shí)現(xiàn)。實(shí)際上是需要我們重新封裝個(gè)抽象層,
            來專門處理平臺(tái)B上的該行為。而實(shí)際的實(shí)現(xiàn),卻還是跟平臺(tái)A上的一樣。其實(shí)我們仔細(xì)一想。其實(shí)平臺(tái)A了的抽象(即:AbstractClassX)與平臺(tái)B上的抽象(假如為:AbstractClassY),
            其實(shí)它們是類似的。因?yàn)樾枰幚淼墓δ芤粯印R虼耍覀兙拖耄绻麑⑦@種抽象與實(shí)現(xiàn)具體分離開來。在抽象中,留個(gè)具體實(shí)現(xiàn)的抽象引用(此其實(shí)就是該模式所指的Bridge----即:橋
            通過該橋,將抽象與具體的實(shí)現(xiàn)連接起來。因此,我想該模式的名稱就是因此得來的吧)。那樣。抽象可以不受限制的擴(kuò)展,實(shí)現(xiàn)也同樣可以不受限制的擴(kuò)展。這樣,系統(tǒng)的框架就不需要
            更改,其不妙哉?!因此就有了如下的code

            //******************************************************************
            //* 抽象聲明及抽象部分的實(shí)現(xiàn)
            //******************************************************************
            //抽象的抽象基類聲明
            class AbstractClass
            {
            private:
             //xxx
            protected:
             AbstractImpl* m_pAIObj; //具體的抽象實(shí)現(xiàn)的抽象對(duì)象(這話很ao口,但理解了這話,也就理解了該模式。可以大言不慚地說,該模式的秘密就在這句話上)
             //xxx
            public:
             //xxx
             void DoSomething(void) = 0;
             //xxx
            }

            //平臺(tái)A上的抽象的具體實(shí)現(xiàn)(注意:此實(shí)現(xiàn)子類,是針對(duì)抽象的)
            class AbstractClassA : public AbstractClass
            {
            private:
             //xxx
            protected:
             //xxx
            public:
             //xxx
             void DoSomething(void) { m_pAIObj.DoSomething(); }
             //xxx
            }

            //平臺(tái)B上的抽象的具體實(shí)現(xiàn)(注意:此實(shí)現(xiàn)子類,是針對(duì)抽象的)
            class AbstractClassB : public AbstractClass
            {
            private:
             //xxx
            protected:
             //xxx
            public:
             //xxx
             void DoSomething(void) { m_pAIObj.DoSomething(); }
             //xxx
            }

            //******************************************************************
            //* 實(shí)現(xiàn)的抽象聲明及其實(shí)現(xiàn)
            //******************************************************************
            //實(shí)現(xiàn)部分的抽象基類聲明
            class AbstractImplClass
            {
            private:
             //xxx
            protected:
             //xxx
            public:
             //xxx
             void DoSomething(void) = 0;
             //xxx
            }

            //具體算法1的具體實(shí)現(xiàn)
            class ImplX : public AbstractImplClass
            {
            private:
             //xxx
            protected:
             //xxx
            public:
             //xxx
             void DoSomething(void) { // do something... }
             //xxx
            }

            //具體算法1的具體實(shí)現(xiàn)
            class ImplY : public AbstractImplClass
            {
            private:
             //xxx
            protected:
             //xxx
            public:
             //xxx
             void DoSomething(void) { // do something... }
             //xxx
            }

            //******************************************************************
            //* 實(shí)際應(yīng)用方面
            //******************************************************************

            int main(int argc, char* argv[])
            {
             AbstractImplClass* pImplObj = new ImplX();//或new ImplY();等等。
             //下面注意下:因?yàn)樯厦娴拇a中,本人為了簡(jiǎn)寫,并沒有明確寫出抽象部分的具體構(gòu)造函數(shù)。
             //相信,是程序員,看完下面這行都懂得,上面的抽象部分的聲明,應(yīng)該聲明一個(gè)什么樣的
             //構(gòu)造函數(shù)吧。
             AbstractClass* pAbstractObj = new AbstractClassA(pImplObj);//或new AbstractClassB(pImplObj);等等。

             //do other something...

             //在此補(bǔ)充一點(diǎn):有上面的設(shè)計(jì),系統(tǒng)的框架將都無需修改。不論是實(shí)現(xiàn)的具體算法改變了,還是
             //抽象的需求變動(dòng)。程序都無需要修改框架代碼,,僅僅只需要寫個(gè)具體的實(shí)現(xiàn)類(不管是實(shí)現(xiàn)的實(shí)現(xiàn)類,還是
             //抽象的實(shí)現(xiàn)類)即可。這就是橋接模式。
            }

            posted on 2011-05-16 00:42 Jacc.Kim 閱讀(218) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 設(shè)計(jì)模式
            久久偷看各类wc女厕嘘嘘| 午夜精品久久影院蜜桃| 亚洲午夜久久久久妓女影院| 亚洲人成伊人成综合网久久久| 亚洲国产精品无码久久久秋霞2 | 久久国语露脸国产精品电影| 亚洲国产精品无码久久SM| 久久综合久久综合九色| 国产精品久久婷婷六月丁香| 狠狠色丁香久久婷婷综合五月| 国产精品午夜久久| 久久超碰97人人做人人爱| 亚洲乱码日产精品a级毛片久久| 少妇无套内谢久久久久| 国产综合免费精品久久久| 97精品伊人久久久大香线蕉| 国产成人精品综合久久久| 久久夜色精品国产噜噜麻豆| 亚洲国产精品综合久久网络| 免费国产99久久久香蕉| 久久精品国产99久久久| 欧美日韩精品久久免费| 国产综合精品久久亚洲| 丰满少妇高潮惨叫久久久| 久久成人小视频| 日日狠狠久久偷偷色综合免费 | 久久本道久久综合伊人| 国产精品久久永久免费| 久久久久久亚洲Av无码精品专口 | 久久精品嫩草影院| 久久精品a亚洲国产v高清不卡| 久久精品青青草原伊人| 国产精品久久久久蜜芽| 久久久久99精品成人片三人毛片| 99久久综合狠狠综合久久止| 久久精品无码一区二区无码| 久久香蕉超碰97国产精品| 精品久久久噜噜噜久久久| 久久久久久久久久久久中文字幕| 精品多毛少妇人妻AV免费久久 | 99久久精品国内|