<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                **定義**:橋接模式(BridgePattern),將抽象部分與它的實現部分分離,使它們都可以獨立地變化。 類型:結構型模式。 類圖: ![](https://box.kancloud.cn/2016-08-19_57b6abd386541.jpg) 參與角色: 1. Clinet,客戶指定組裝電腦,指定了最初的接口。 1. Computer,電腦抽象類,指定了具體安裝CPU的接口。 1. DesktopComputer,具體的臺式機電腦,根據主板型號具體實現如何安裝CPU。 1. CPU,抽象類,指定連接CPU針腳的接口。 1. Pentium,Core,具體的CPU,具體實現如何連續CPU的針腳。 概述: ?????? CPU每年都在更新,尤其是像Pentium和Core這樣兩代產品架構的更新,直接導致整個電腦產業鏈的更新。例如,Pentium和Core架構下的CPU針腳數不一樣,這就要求匹配的主板也必須與CPU吻合。另外核心顯卡也集成到了CPU當中云,這些都會影響到電腦的組裝。 ???????為了保證達到開閉原則,盡量不去修改原有代碼,那么針對產品的升級,就必須通過繼承來實現。但是電腦產品的升級會涉及到很多部件。如CPU升級了,就要派生一個新的類了。如果主板升級了,也要派生一個新的類。如果聲卡升級了,也需要派生一個新的類。或者其中兩個部件升級了,也需要派生新的電腦類。隨著變化的部件越來越多,可能會產生非常多非常多的派生類,不便于管理。這個時候就需要用到橋接模式。 ??????橋接模式,將每一個維度的變化都獨立出來,并且做成抽象類,通過派生來實現單個維度的升級改變。這樣,在客戶看來,具體的產品組裝接口是沒有變,不影響客戶端的使用。 ??????這里的示例,主要是以CPU以及安裝CPU這兩個維度作一下模擬。 代碼示例: ~~~ #include?"stdafx.h" #include?<iostream> using?namespace?std; class?CCPU { public: ???virtual?~CCPU(){} ???virtual?void?Connect()?=?0; }; class?CComputer { public: ???CComputer(CCPU*?_pCPU)?:?m_pCPU(_pCPU){} ???virtual?~CComputer(){} ???virtual?void?ConnectCPU()?=?0; protected: ???CCPU*?m_pCPU; }; class?CDesttopComputer?:?public?CComputer { public: ???CDesttopComputer(CCPU*?_pCPU)?:?CComputer(_pCPU){} ???virtual?void?ConnectCPU() ???{ ???????cout<<"正在安裝CPU"<<endl; ???????m_pCPU->Connect(); ???} }; class?CPentiun?:?public?CCPU { public: ???virtual?void?Connect() ???{ ???????cout<<"正在安裝奔騰CPU"<<endl; ???} }; class?CCore?:?public?CCPU { public: ???virtual?void?Connect() ???{ ???????cout<<"正在安裝酷睿CPU"<<endl; ???} }; int?_tmain(int?argc,?_TCHAR*?argv[]) { ???//?組裝奔騰臺式機 ???CCPU*?pCPU?=?new?CPentiun(); ???CComputer*?pComputer?=?new?CDesttopComputer(pCPU); ???pComputer->ConnectCPU(); ???delete?pCPU; ???delete?pComputer; ???//?組裝酷睿臺式機 ???pCPU?=?new?CCore(); ???pComputer?=?new?CDesttopComputer(pCPU); ???pComputer->ConnectCPU(); ???delete?pCPU; ???delete?pComputer; ???return?0; } ~~~ **注意:**抽象類的析構函數一定要設定為虛函數,否則在內存釋放的時候可能會有問題.? 優缺點: 1. 優點,將實現與抽象分離,具有更好的可擴展性。并且通過組合的方式可以大大提高代碼的靈活性。 1. 缺點,前期較好的識別出可變的維度有一定的困難。 參考資料: 1. 《設計模式——可復用面向對象軟件基礎》 1. 《Java與模式》 1. 《大話設計模式》
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看