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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                29.2 橋梁模式的定義 橋梁模式(Bridge Pattern)也叫做橋接模式,是一個比較簡單的模式,其定義如下:Decouple an abstraction from its implementation so that the two can vary independently.(將抽象和實現解耦,使得兩者可以獨立地變化。) 橋梁模式的重點是在“解耦”上,如何讓它們兩者解耦是我們要了解的重點,我們先來看橋梁模式的通用類,如圖29-4所示。 ![](https://box.kancloud.cn/2016-08-14_57b0036c9b077.jpg) 圖29-4 橋梁模式通用類圖 我們先來看橋梁模式中的4個角色。 ● Abstraction——抽象化角色 它的主要職責是定義出該角色的行為,同時保存一個對實現化角色的引用,該角色一般是抽象類。 ● Implementor——實現化角色 它是接口或者抽象類,定義角色必需的行為和屬性。 ● RefinedAbstraction——修正抽象化角色 它引用實現化角色對抽象化角色進行修正。 ● ConcreteImplementor——具體實現化角色 它實現接口或抽象類定義的方法和屬性。 橋梁模式中的幾個名詞比較拗口,大家只要記住一句話就成:抽象角色引用實現角色,或者說抽象角色的部分實現是由實現角色完成的。我們來看其通用源碼,先看實現化角色,如代碼清單29-16所示。 代碼清單29-16 實現化角色 public?interface?Implementor?{ ?????//基本方法 ?????public?void?doSomething(); ?????public?void?doAnything(); } 它沒有任何特殊的地方,就是一個一般的接口,定義要實現的方法。其實現類如代碼清單29-17所示。 代碼清單29-17 具體實現化角色 public?class?ConcreteImplementor1?implements?Implementor{ ?????public?void?doSomething(){ ?????????????//業務邏輯處理 ?????} ?????public?void?doAnything(){ ?????????????//業務邏輯處理 ?????} } public?class?ConcreteImplementor2?implements?Implementor{ ?????public?void?doSomething(){ ?????????????//業務邏輯處理 ?????} ?????public?void?doAnything(){ ?????????????//業務邏輯處理 ?????} } 上面定義了兩個具體實現化角色——代表兩個不同的業務邏輯。我們再來看抽象化角色,如代碼清單29-18所示。 代碼清單29-18 抽象化角色 public?abstract?class?Abstraction?{ ?????//定義對實現化角色的引用 ?????private?Implementor?imp; ?????//約束子類必須實現該構造函數 ?????public?Abstraction(Implementor?_imp){ ?????????????this.imp?=?_imp; ?????} ?????//自身的行為和屬性 ?????public?void?request(){ ?????????????this.imp.doSomething(); ?????} ?????//獲得實現化角色 ?????public?Implementor?getImp(){ ?????????????return?imp; ?????} } 各位可能要問,為什么要增加一個構造函數?答案是為了提醒子類,你必須做這項工作,指定實現者,特別是已經明確了實現者,則盡量清晰明確地定義出來。我們來看具體的抽象化角色,如代碼清單29-19所示。 代碼清單29-19 具體抽象化角色 public?class?RefinedAbstraction?extends?Abstraction?{ ?????//覆寫構造函數 ?????public?RefinedAbstraction(Implementor?_imp){ ?????????????super(_imp); ?????} ?????//修正父類的行為 ?????@Override ?????public?void?request(){ ?????????????/* ??????????????*?業務處理... ??????????????*/ ?????????????super.request(); ?????????????super.getImp().doAnything(); ?????} } 想想看,如果我們的實現化角色有很多的子接口,然后是一堆的子實現。如果在構造函數中不傳遞一個盡量明確的實現者,代碼就很不清晰。我們來看場景類如何模擬,如代碼清單29-20所示。 代碼清單29-20 場景類 public?class?Client?{ ?????public?static?void?main(String[]?args)?{ ?????????????//定義一個實現化角色 ?????????????Implementor?imp?=?new?ConcreteImplementor1(); ?????????????//定義一個抽象化角色 ?????????????Abstraction?abs?=?new?RefinedAbstraction(imp); ?????????????//執行行文 ?????????????abs.request(); ?????} } 橋梁模式是一個非常簡單的模式,它只是使用了類間的聚合關系、繼承、覆寫等常用功能,但是它卻提供了一個非常清晰、穩定的架構。
                  <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>

                              哎呀哎呀视频在线观看